Je veux créer un test NUnit pour m'assurer que ma fonction ne lève pas d'exception. Existe-t-il un moyen spécifique de le faire, ou je devrais simplement écrire
[Test]
public void noExceptionTest() {
testedFunction();
}
et il réussira si aucune exception n'est levée?
Assert.DoesNotThrow(() => { /* custom code block here*/});
OU juste méthode
Assert.DoesNotThrow(() => CallMymethod());
Pour plus de détails, voir Assertions d'exception NUnit
En utilisant NUnit 3.0 Constraint Model assertions de type, le code ressemblerait à ceci:
Assert.That(() => SomeMethod(actual), Throws.Nothing);
Cet exemple est tiré de wiki NUnit .
Ne pas lever d'exception est le cours normal de l'action. Votre test réussira à vérifier qu'aucune exception n'est levée.
Vous avez raison. S'il y a une exception, le test échouera.
Sauf si vous spécifiez
[ExpectedException( typeof(YourException) ) ]
public void TestMethod()
{
...
}
Ou comme le dit @sll, vous utilisez le plus spécifique
Assert.DoesNotThrow
Oui, aucune exception levée -> réussite au test. S'il y a eu un bloc try-catch sans relance, il passera aussi.
Je pense qu'il y a un problème lié à la logique du test unitaire. Si vous attendez une exception spécifique sous certaines entrées, vous la déclarez comme exception attendue. Si vous vérifiez simplement si votre fonction se comporte correctement et qu'aucune exception n'est attendue pendant ce comportement correct, écrivez-la et si elle lève une exception, votre test échoue.
Votre code semble fonctionner correctement, en revanche, seule la vérification d'aucune exception peut ne pas être le bon moyen pour les tests unitaires. Dans les tests unitaires, vous vous attendez généralement à certaines sorties (valeurs attendues), vous avez des sorties réelles (valeurs réelles) et vous affirmez que les valeurs attendues et réelles sont les mêmes.