Assert.DoesNotThrow avec NUnit - comment obtenir une trace de pile?
-
28-10-2019 - |
Question
J'utilise NUnit pour les tests unitaires (fonctionnant avec TD.NET).
Lorsque j'utilise Assert.DoesNotThrow, j'obtiens l'exception, mais sans aucune trace de pile, ce qui rend plus difficile l'identification du problème racine.
Comment puis-je résoudre ce problème?
La solution
Le Assert.DoesNotThrow
est redondant, si un test lance le test échouera automatiquement sans une assertion.Pour clarifier ce qui est testé est, à mon humble avis, mieux exprimé dans le nom de la méthode de test.Il y a très peu d'avantages en matière de documentation dans la syntaxe Assert.DoesNotThrow
et, comme vous le faites remarquer, rend simplement plus difficile la correction des tests qui échouent.
De plus, si vous avez un test très long avec plusieurs assertions, le Assert.DoesNotThrow
remplit un rôle important pour affirmer que le bloc de code correct a levé une exception.Cependant, dans ce cas, une solution plus appropriée consiste à voir si le test peut être raccourci et / ou les affirmations déplacées dans leurs propres tests.
Autres conseils
Je doute que cela réponde vraiment à votre question, mais je raccourcirais le test à une seule situation afin que vous n'ayez pas besoin d'envelopper du code dans un délégué que vous passez à Assert.DoesNotThrow
.Ensuite, écrivez simplement le test sans aucune affirmation.Un test qui lève une exception inattendue échouera, il fera donc ce que vous voulez, et vous obtiendrez l'exception complète.
Environ 10% de mes tests fonctionnent comme ceci;aucune assertion du tout, et des noms de méthodes comme ThisOrThatShouldNeverThrow()
.
Une autre option, lors du débogage, consiste à exécuter le test dans un débogueur (en utilisant TD.Net) et dans Debug | Exceptions, cochez certaines cases supplémentaires pour que le débogueur s'arrête lorsque l'exception est levée.