ExpectedException в nUnit дал мне ошибку
Я новичок в использовании инструментов тестирования в .NET Framework, поэтому я загрузил его из NuGet с помощью ReSharper.
Я использую этот Быстрый старт, чтобы узнать, как использовать nUnit. Я только что скопировал код, и на этот атрибут возникла ошибка:
[ExpectedException(typeof(InsufficientFundsException))] //it is user defined Exception
Ошибка:
Невозможно найти имя типа или пространства имен ExpectedException (вам не хватает директивы using или ссылки на сборку?)
Почему? И если мне нужна такая функциональность, что я должен ее заменить?
Ответы
Ответ 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));
}