visual unit test studio net ejemplo c# .net unit-testing testing nunit

c# - test - ExpectedException en nUnit me dio un error



unit test.net core (3)

Soy nuevo en el uso de herramientas de prueba en .NET Framework, así que lo descargué de NuGet con la ayuda de ReSharper.

Estoy usando este Inicio rápido para aprender a usar nUnit. Acabo de copiar el código y apareció un error en este atributo:

[ExpectedException(typeof(InsufficientFundsException))] //it is user defined Exception

El error es:

No se pudo encontrar el tipo o el nombre del espacio de nombres ''ExpectedException'' (¿falta una directiva using o una referencia de ensamblado?)

¿Por qué? Y si necesito tal funcionalidad, ¿con qué debería reemplazarla?


No estoy seguro de si esto cambió recientemente, pero con NUnit 3.4.0 proporciona Assert.Throws<T> .

[Test] public void TransferWithInsufficientFunds() { Account source = new Account(); source.Deposit(200m); Account destination = new Account(); destination.Deposit(150m); Assert.Throws<InsufficientFundsException>(() => source.TransferFunds(destination, 300m)); }


Si aún desea usar Atributos, considere esto:

[TestCase(null, typeof(ArgumentNullException))] [TestCase("this is invalid", typeof(ArgumentException))] public void SomeMethod_With_Invalid_Argument(string arg, Type expectedException) { Assert.Throws(expectedException, () => SomeMethod(arg)); }


Si está utilizando NUnit 3.0, su error se debe a que ExpectedExceptionAttribute se ha eliminado . En su lugar, debe usar una construcción como la Restricción de Tiros .

Por ejemplo, el tutorial que vinculó tiene esta prueba:

[Test] [ExpectedException(typeof(InsufficientFundsException))] public void TransferWithInsufficientFunds() { Account source = new Account(); source.Deposit(200m); Account destination = new Account(); destination.Deposit(150m); source.TransferFunds(destination, 300m); }

Para cambiar esto para que funcione en NUnit 3.0, cámbielo a lo siguiente:

[Test] public void TransferWithInsufficientFunds() { Account source = new Account(); source.Deposit(200m); Account destination = new Account(); destination.Deposit(150m); Assert.That(() => source.TransferFunds(destination, 300m), Throws.TypeOf<InsufficientFundsException>()); }