(En contraste con la respuesta de mcottle) Respuesta larga: NO ... la mayoría del tiempo
Cuando dice que espera que una prueba genere una excepción en particular, sabrá cuándo CUALQUIER línea en esa prueba genera esa excepción en particular.
No es exactamente lo mismo que saber que el método bajo prueba lanza 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 SetUp
), es mejor que ajuste la línea individual que realmente desea probar en un try / catch, 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 luego
[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.
(Debes intentar evitar las cosas de configuración aleatoria. A veces, es más fácil tener algún código de configuración en la prueba.)