47

私はテストのためにMOQフレームワークを使用しています。障害例外がスローされると予想されるシナリオがあります。投げられたことを確認するにはどうすればよいですか?

public void Koko(List<string?> list) 
{ 
   foreach(string? str in list) 
   { 
        if (str != null) someProperty.Foo(str); 
        else throw new FormatException(); 
   } 
} 

前もって感謝します。

4

7 に答える 7

12

NUnit アサートを使用して、例外がスローされることをテストできます。

Assert.That(() => testObject.methodToTest(), Throws.TypeOf<FaultException>());
于 2013-04-17T07:00:58.470 に答える
12

このMoq の紹介 をお読みください。メソッドが呼び出されInvalidOperationExceptionたときにスローを設定する方法は次のとおりです。DoSomething

mock.Setup(foo => foo.DoSomething()).Throws<InvalidOperationException>();

次に、メソッドが呼び出されたかどうかを確認します。呼び出された場合、例外が発生しました

mock.Verify(foo => foo.DoSomething());
于 2013-04-17T06:56:47.117 に答える
9

古い質問ですが、実際に解決策が何であるかを示すソースコードはありません。

var correctExceptionThrown = false;

try
{
    _myClass.DoSomething(x);
}
catch (Exception ex)
{
    if (ex.Message == "Expected message")
        correctExceptionThrown = true;
}                    

Assert.IsTrue(correctExceptionThrown);

メッセージをチェックするのではなく、特定のタイプの例外をキャッチできることに注意してください (一般的に推奨されます)。

于 2016-10-03T11:13:47.697 に答える
2

わかりましたので、次の方法で解決しました。

例外が私のテストを壊したので、私はメソッド呼び出しをtry-catchのBecauseブロックに入れました.

次に、単純な検証を使用できます。

すべてのヘルパーに感謝します...

于 2013-04-17T08:36:55.913 に答える