que tengo varios unittests de este patrón:cobertura de código vs ExpectedException
[TestMethod()]
[ExpectedException (typeof (ArgumentNullException))]
public void DoStuffTest_Exception()
{
var foo = new Foo();
Foo.DoStuff (null);
}
Resulta que la cobertura de código markes la línea de lanzamiento como medio de gestión, por lo que obtener 1 bloque de código al descubierto cada vez.
Después de pensar en este problema por un tiempo, la mejor solución que se me ocurrió fue agregar un try/catch. Dado que este es un patrón repetido, voy a crear un método de ayuda a lo largo de las líneas de
public static void ExpectException<_T> (Action action) where _T: Exception
{
try { action(); }
catch (_T) { return; }
Assert.Fail ("Expected " + _T);
}
Esto tendría el beneficio adicional agradable que podría agregar todas las pruebas de excepción a las pruebas no tirar.
¿Es este un diseño válido, o me perdí algo?
Editar: Ugs ... parece que el método anterior ExpectException me deja con 1 bloque descubierto también.
+1. Buen material. Esto me ha estado molestando por un tiempo, pero nunca llegó a arreglarlo. – magnus