(En contraste con la respuesta de mcottle) Respuesta larga: NO ... la mayoría de las veces
Cuando diga que espera que una prueba provoque una excepción particular, sabrá cuándo CUALQUIER línea de esa prueba genera esa excepción particular.
Eso no es lo mismo que saber que el método bajo prueba arroja la excepción.
Si su prueba implica configurar un objeto o contexto (dentro de la prueba, no dentro de la versión de su marco de trabajo SetUp
), es mejor que ajuste la línea única que realmente desea probar en un intento / captura, posiblemente con un ayudante.
Por ejemplo,
public static class AssertHelper {
public delegate void Thunk();
public static void DoesNotThrow<T>(Thunk thunk, string message = "")
where T: Exception {
try {
thunk.Invoke();
} catch(T) {
Assert.Fail(message);
}
}
}
y entonces
[TestMethod]
public void assertHelperInAction() {
// Random setup stuff here that's too annoying to put in my SetUp
// method.
AssertHelper.DoesNotThrow<IllegalArgumentException>(() =>
{/* My random method under test */})
}
Si esta prueba falla, sé que mi método bajo prueba arrojó la excepción, y no algo en la configuración aleatoria.
(Debería intentar evitar cosas de configuración aleatorias. A veces, es más fácil tener algún código de configuración en la prueba).