J'ai plusieurs unittests de ce modèle :
[TestMethod ()]
[ExpectedException (typeof (ArgumentNullException))]
public void DoStuffTest_Exception ()
{
var foo = new Foo ();
Foo.DoStuff (null);
}
Il s'avère que la couverture de code marque la ligne de lancement comme étant à moitié exécutée, ce qui me permet d'obtenir un bloc de code non couvert à chaque fois.
Après avoir réfléchi à ce problème pendant un certain temps, la meilleure solution que j'ai trouvée a été d'ajouter un try/catch. Comme il s'agit d'un motif répété, je vais créer une méthode d'aide du type
public static void ExpectException<_T> (Action action) where _T: Exception
{
try { action(); }
catch (_T) { return; }
Assert.Fail ("Expected " + _T);
}
Cela aurait l'avantage de me permettre d'ajouter tous les tests d'exception aux tests de non-renvoi.
S'agit-il d'une conception valable, ou ai-je manqué quelque chose ?
Edit : Ugs... il semble que la méthode ExpectException ci-dessus me laisse aussi avec un bloc non couvert.