Test spécifique type d'exception est levée ET l'exception a de bonnes propriétés
Je veux tester que MyException
est jeté dans un certain cas. EXPECT_THROW
est bien ici. Mais je tiens aussi à vérifier l'exception a un état spécifique de l'e.g e.msg() == "Cucumber overflow"
.
Comment est-ce mieux mis en œuvre dans GTest?
Vous devez vous connecter pour publier un commentaire.
J'ai surtout deuxième Lilshieste de la réponse, mais ajoute que vous devriez également
vérifiez que le mal type d'exception est levée pas:
Un collègue est venu avec la solution viens de re-jeter l'exception.
Le truc: pas besoin de plus de FAIL() les déclarations, les deux ATTENDENT... des appels qui permettent de tester les bits que vous voulez vraiment: l'exception en tant que tel et sa valeur.
Jeff Langr décrit une bonne approche dans son livre, Modernes de Programmation C++ avec Test-Driven Development:
C'est l'approche que j'ai utilisée, et ont vu dans la pratique d'ailleurs.
Edit: Comme cela a été souligné par @MikeKinghan, ce n'est pas assez correspondre à la fonctionnalité fournie par
EXPECT_THROW
; le test ne pas échouer si le mauvais exception est levée. Un supplément decatch
clause pourrait être ajouté à cette adresse:EXPECT_THROW
est agréable. Je suppose que l'extension pour ajouter uncatch(...){ FAIL(); }
est une option?Je recommande la définition d'une nouvelle macro basé sur Mike Kinghan de l'approche.
Mike
TEST(foo_test,out_of_range)
exemple serait alorsqui, je pense, finit par être beaucoup plus lisible.
Que j'ai besoin de faire plusieurs de ces tests, j'ai écrit une macro qui comprend essentiellement Mike Kinghan de la réponse, mais on "supprime" tous les code réutilisable:
Utilisation:
Mises en garde:
std::exception_ptr
J'aime la plupart des réponses. Cependant, puisqu'il semble que GoogleTest fournit EXPECT_PRED_FORMAT qui permet de faciliter cela, je tiens à ajouter cette option à la liste des réponses:
où ExceptionChecker est défini comme:
- Je utiliser Matthäus Brandl de la macro avec les éléments suivants modification mineure:
Mettre la ligne
à l'extérieur (f.e. avant d') la définition de la macro comme
à éviter la pluralité de définition du symbole
_exceptionPtr
.Étendre sur les réponses précédentes, une macro qui vérifie qu'une exception d'un type donné, il a été jeté et le message qui commence avec la chaîne.
Le test échoue si aucune exception n'est levée, le type d'exception est mauvaise ou si le message ne démarre pas avec la chaîne.
Exemple d'utilisation:
Vous pouvez essayer de Stimuler léger test: