.NET Frameworkでテストツールを使用するのは初めてなので、ReSharperの助けを借りてNuGetからダウンロードしました。
私はこれを使用しています クイックスタート nUnitの使用方法を学びます。コードをコピーしたばかりで、この属性でエラーが発生しました。
[ExpectedException(typeof(InsufficientFundsException))] //it is user defined Exception
エラーは次のとおりです。
型または名前空間名 'ExpectedException'が見つかりませんでした(usingディレクティブまたはAssembly参照がありませんか?)
どうして?そして、このような機能が必要な場合、何に置き換える必要がありますか?
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>());
}
これが最近変更されたかどうかはわかりませんが、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));
}
それでも属性を使用する場合は、次のことを考慮してください。
[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));
}