He descubierto que estas parecen ser las dos formas principales de probar excepciones:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
¿Cuál de estos sería el mejor? ¿Uno ofrece ventajas sobre el otro? ¿O es simplemente una cuestión de preferencia personal?
Assert.That(() => MethodThatThrows(), Throws.Exception)
ExpectedException
atributo, por lo que para la versión 3+ solo laAssert.Throws
variante es relevante.Respuestas:
El primero le permite probar más de una excepción, con múltiples llamadas:
El segundo solo le permite probar una excepción por función de prueba.
fuente
Assert.Throws
.La principal diferencia es:
ExpectedException()
El atributo hace pasar la prueba si se produce una excepción en cualquier lugar del método de prueba.El uso de
Assert.Throws()
permite especificar elexact
lugar del código donde se espera una excepción.NUnit 3.0 deja de ofrecer soporte oficial por
ExpectedException
completo.Entonces, definitivamente prefiero usar el
Assert.Throws()
método en lugar delExpectedException()
atributo.fuente
Prefiero afirmar. Arroja ya que me permite verificar y afirmar otras condiciones después de que se lanza la excepción.
fuente
También puede escribir con fuerza el error que espera (como la versión antigua de Attrib).
fuente
Si está utilizando una versión anterior ( <= 2.0 ) de la
NUnit
que necesitaExpectedException
.Si está utilizando la versión 2.5 o posterior, puede usar
Assert.Throw()
https://github.com/nunit/docs/wiki/Breaking-Changes
Cómo usar: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5
fuente