Descobri que essas parecem ser as duas principais maneiras de testar exceções:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
Qual destes seria o melhor? Um oferece vantagens sobre o outro? Ou é simplesmente uma questão de preferência pessoal?
Assert.That(() => MethodThatThrows(), Throws.Exception)
ExpectedException
atributo, portanto, para a versão 3+, apenas aAssert.Throws
variante é relevante.Respostas:
A primeira permite testar mais de uma exceção, com várias chamadas:
O segundo permite apenas testar uma exceção por função de teste.
fonte
Assert.Throws
.A principal diferença é:
ExpectedException()
O atributo faz com que o teste seja aprovado se ocorrer uma exceção em qualquer lugar do método de teste.O uso de
Assert.Throws()
permite especificar oexact
local do código onde a exceção é esperada.O NUnit 3.0 descarta
ExpectedException
totalmente o suporte oficial .Então, eu definitivamente prefiro usar o
Assert.Throws()
método do que oExpectedException()
atributo.fonte
Prefiro assert.throws, pois me permite verificar e afirmar outras condições após a exceção ser lançada.
fonte
Você também pode digitar com firmeza o erro que está esperando (como a versão antiga do attrib).
fonte
Se você estiver usando a versão mais antiga ( <= 2.0 )
NUnit
, precisará usarExpectedException
.Se você estiver usando a versão 2.5 ou posterior, poderá usar
Assert.Throw()
https://github.com/nunit/docs/wiki/Breaking-Changes
Como usar: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5
fonte