web-dev-qa-db-fra.com

Utiliser ASSERT et EXPECT dans GoogleTest

Alors que les macros ASSERT_ * provoquent l'arrêt du scénario de test, les macros EXPECT_ * poursuivent son évaluation. Je voudrais savoir quels sont les critères pour décider d'utiliser l'un ou l'autre.

40
martjno

Utilisez ASSERT lorsque la condition doit tenir - sinon, le test s'arrête là. Utilisez-le lorsque le reste du test n'a pas de signification sémantique sans cette condition.

Utilisez EXPECT lorsque la condition devrait est maintenue, mais dans les cas où elle ne l'est pas, nous pouvons toujours tirer profit de la poursuite du test. (Le test échouera finalement à la fin, cependant.)

La règle générale est la suivante: utilisez EXPECT par défaut, sauf si vous exigez quelque chose à conserver pour le reste des tests, auquel cas vous devez utiliser ASSERT pour cette condition particulière.


Cela se retrouve dans le primer :

Habituellement EXPECT_* sont préférés, car ils permettent de signaler plus d'un échec dans un test. Cependant, vous devez utiliser ASSERT_* si cela n'a pas de sens de continuer lorsque l'assertion en question échoue.

46
GManNickG

Utilisation EXPECT_ lorsque vous

  • souhaitez signaler plusieurs échecs dans votre test

Utilisation ASSERT_ quand

  • cela n'a pas de sens de continuer lorsque l'assertion échoue

Puisque ASSERT_ abandonne immédiatement votre fonction en cas d'échec, le code de nettoyage possible est ignoré. Préférer EXPECT_ par défaut.

21
nabulke

En plus des réponses précédentes ...

ASSERT_ Ne met pas fin à l'exécution du scénario de test. Il retourne à partir de la fonction utilisée. Outre l'échec du scénario de test, il est évalué à return;, Ce qui signifie qu'il ne peut pas être utilisé dans une fonction renvoyant autre chose que void. Sauf si vous êtes d'accord avec l'avertissement du compilateur, bien sûr.

EXPECT_ Échoue au scénario de test mais pas return;, Il peut donc être utilisé dans des fonctions de tout type de retour.

6
Martin G

Vérifiez le lien suivant: Test C++ efficace avec GoogleTest (diapo 23). Il existe de bonnes lignes directrices/conseils sur l'utilisation de EXPECT vs ASSERT.

3
ratkok