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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top