(Em contraste com a resposta de mcottle) Resposta longa: NÃO ... na maioria das vezes
Quando você diz que espera que um teste gere uma exceção específica, você saberá quando QUALQUER linha nesse teste gera essa exceção específica.
Isso não é o mesmo que saber que o método em teste gera a exceção.
Se o seu teste envolver a configuração de um objeto ou contexto (dentro do teste, e não na versão de sua estrutura SetUp
), é melhor agrupar a única linha que você realmente deseja testar em uma tentativa / captura, possivelmente com um ajudante.
Por exemplo,
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);
}
}
}
e depois
[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 */})
}
Se esse teste falhar, sei que meu método em teste lançou a exceção, e não algo no material de instalação aleatória.
(Você deve tentar evitar itens de configuração aleatórios. Às vezes, é mais fácil ter algum código de configuração no teste.)