Подтвердить что ты не робот

ExpectedException в nUnit дал мне ошибку

Я новичок в использовании инструментов тестирования в .NET Framework, поэтому я загрузил его из NuGet с помощью ReSharper.

Я использую этот Быстрый старт, чтобы узнать, как использовать nUnit. Я только что скопировал код, и на этот атрибут возникла ошибка:

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

Ошибка:

Невозможно найти имя типа или пространства имен ExpectedException (вам не хватает директивы using или ссылки на сборку?)

Почему? И если мне нужна такая функциональность, что я должен ее заменить?

4b9b3361

Ответ 1

Если вы используете NUnit 3.0, ваша ошибка связана с тем, что ExpectedExceptionAttribute был удален. Вместо этого вы должны использовать конструкцию типа Throws Constraint.

Например, связанный с ним учебник имеет следующий тест:

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

Чтобы изменить это для работы в NUnit 3.0, измените его на следующее:

[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

Не уверен, что это изменилось недавно, но с NUnit 3.4.0 он предоставляет 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

Если вы все еще хотите использовать атрибуты, рассмотрите следующее:

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