web-dev-qa-db-ja.com

予期される例外なしでテストする

NUnitテストを作成して、関数が例外をスローしないことを確認します。それを行うための特定の方法がありますか、私はただ書くべきです

[Test]
public void noExceptionTest() {
  testedFunction();
}

例外がスローされなければ成功しますか?

60
Yury Pogrebnyak
Assert.DoesNotThrow(() => { /* custom code block here*/});

または単にメソッド

Assert.DoesNotThrow(() => CallMymethod());

詳細については、「 NUnit Exception Asserts 」を参照してください

97
sll

NUnit 3.0の使用 制約モデル タイプアサーションでは、コードは次のようになります。

Assert.That(() => SomeMethod(actual), Throws.Nothing);

この例は NUnit wiki から取られています。

25
Schneider

例外をスローしないことは、通常のアクションです。テストは、例外がスローされないことを正常に検証します。

6
dasblinkenlight

あなたは正しいです。例外がある場合、テストは失敗します。

指定しない限り

[ExpectedException( typeof(YourException) ) ]
public void TestMethod()
{ 
   ...
}

または、@ sllが言うように、より具体的な

Assert.DoesNotThrow

アサーション

2
Phil

はい、例外はスローされません->テストパス。再スローせずにtry-catchブロックがあった場合、それもパスします。

1
Anton

ユニットテストロジックに関連する問題があると思います。特定の入力の下で特定の例外を予期している場合、それを予期される例外として宣言します。関数が適切に動作するかどうかを確認するだけで、この適切な動作中に例外が予期されない場合は、単にそれを記述し、例外がスローされるとテストは失敗します。

あなたのコードは適切に動作しているように見えますが、ユニットテストでは例外をチェックしないだけでは適切な方法ではないかもしれません。単体テストでは、通常、いくつかの出力(期待値)を期待し、いくつかの実際の出力(実際の値)があり、期待値と実際の値が同じであると断言します。

1
daryal