web-dev-qa-db-ja.com

nUnitのExpectedExceptionでエラーが発生しました

.NET Frameworkでテストツールを使用するのは初めてなので、ReSharperの助けを借りてNuGetからダウンロードしました。

私はこれを使用しています クイックスタート nUnitの使用方法を学びます。コードをコピーしたばかりで、この属性でエラーが発生しました。

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

エラーは次のとおりです。

型または名前空間名 'ExpectedException'が見つかりませんでした(usingディレクティブまたはAssembly参照がありませんか?)

どうして?そして、このような機能が必要な場合、何に置き換える必要がありますか?

37

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>());
}
64
Patrick Quirk

これが最近変更されたかどうかはわかりませんが、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)); 
}
12
Nathan Smith

それでも属性を使用する場合は、次のことを考慮してください。

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