Je suis complètement nouveau chez C# et NUnit.Est-ce que ExpectedExceptionAttribute de NUnit seulement moyen de tester si quelque chose soulève une exception?
Dans Boost.Test il existe une famille de macros BOOST_*_THROW
. Dans le module de test de Python, il y a la méthode TestCase.assertRaises
. Pour autant que je sache, en C# avec NUnit (2.4.8), la seule méthode de test d'exception est d'utiliser ExpectedExceptionAttribute
. Pourquoi devrais-je préférer ExpectedExceptionAttribute
- disons - l'approche de Boost.Test? Quel raisonnement peut soutenir cette décision de conception? Pourquoi est-ce mieux dans le cas de C# et NUnit?
Enfin, si je décide d'utiliser ExpectedExceptionAttribute
, comment puis-je faire des tests supplémentaires après que l'exception a été levée et interceptée? Disons que je veux tester l'exigence en disant que l'objet doit être valide après un setter System.IndexOutOfRangeException
. Comment corrigeriez-vous le code suivant pour compiler et fonctionner comme prévu?
[Test]
public void TestSetterException()
{
Sth.SomeClass obj = new SomeClass();
// Following statement won't compile.
Assert.Raises("System.IndexOutOfRangeException",
obj.SetValueAt(-1, "foo"));
Assert.IsTrue(obj.IsValid());
}
Edit: Merci pour vos réponses. Aujourd'hui, j'ai trouvé un C'est les testsblog entry où les trois méthodes décrites par vous sont mentionnées (et une autre variation mineure). Il est dommage que je ne pouvais pas trouver avant :-(
Will not Assert.Fail ("...") vous expulser du test avec une exception AssertionFailedException? –
Oui. Cependant, si l'appel à SetValueAt déclenche une exception (ce que nous voulons), le contrôle passe immédiatement au catch-block et contourne Assert.Fail, passant ainsi le test. Si SetValueAt ne lance pas d'exception, le comportement n'est pas exclu et le test doit échouer. – yfeldblum
C'est plus propre que ma façon de le faire. Je vais utiliser votre approche à l'avenir :) –