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.
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 utiliserASSERT_*
si cela n'a pas de sens de continuer lorsque l'assertion en question échoue.
Utilisation EXPECT_
lorsque vous
Utilisation ASSERT_
quand
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.
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.
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.