ExpectedException in nUnit gave me an error

﹥>﹥吖頭↗ 提交于 2019-12-18 12:06:06

问题


I'm new to using Testing Tools on the .NET Framework, so I downloaded it from NuGet with help from ReSharper.

I am using this Quick Start to learn how to use nUnit. I had just copied the code and an error came up on this attribute:

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

The error is:

The type or namespace name 'ExpectedException' could not be found (are you missing a using directive or an assembly reference?)

Why? And if I need such functionality, what should I replace it with?


回答1:


If you're using NUnit 3.0, then your error is because the ExpectedExceptionAttribute has been removed. You should instead use a construct like the Throws Constraint.

For example, the tutorial you linked has this test:

[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);
}

To change this to work under NUnit 3.0, change it to the following:

[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>());
}



回答2:


Not sure if this changed recently but with NUnit 3.4.0 it provides 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)); 
}



回答3:


If you still want to use Attributes, consider this:

[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));
}


来源:https://stackoverflow.com/questions/33895457/expectedexception-in-nunit-gave-me-an-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!