c# - ¿Utiliza el método NUnit Assert.Throws o el atributo ExpectedException?
unit-testing (5)
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?
El primero le permite probar más de una excepción, con múltiples llamadas:
Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());
El segundo solo le permite probar una excepción por función de prueba.
La principal diferencia es:
ExpectedException()
atributo ExpectedException()
hace que se pase la prueba si se produce una excepción en cualquier lugar del método de prueba.
El uso de Assert.Throws()
permite especificar el lugar exact
del código donde se espera la excepción.
NUnit 3.0 elimina por completo el soporte oficial para ExpectedException
.
Por lo tanto, definitivamente prefiero usar el método Assert.Throws()
lugar del atributo ExpectedException()
.
Prefiero assert.throws ya que me permite verificar y afirmar otras condiciones después de que se lanza la excepción.
[Test]
[Category("Slow")]
public void IsValidLogFileName_nullFileName_ThrowsExcpetion()
{
// the exception we expect thrown from the IsValidFileName method
var ex = Assert.Throws<ArgumentNullException>(() => a.IsValidLogFileName(""));
// now we can test the exception itself
Assert.That(ex.Message == "Blah");
}
Si está usando una versión anterior ( <= 2.0 ) de NUnit
entonces necesita usar ExpectedException
.
Si está utilizando la versión 2.5 o posterior, puede usar Assert.Throw()
github.com/nunit/docs/wiki/Breaking-Changes
Cómo usar: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5
También puede escribir fuerte el error que está esperando (como la versión attrib anterior).
Assert.Throws<System.InvalidOperationException>(() => breakingAction())