3

Junit 4とMockitoを使用していますが、例外をスローするようにメソッド呼び出しをスタブ化したいと思います。

doThrow(MyException.class).when(myObject).foo();

問題は、MyExceptionがチェックされた例外であるため、foo()このステートメントでを呼び出すと、コンパイラは、例外を処理するか、メソッドにthrows句を追加する必要があると文句を言います。

だから私はこの状況を処理する正しい方法は何であるか疑問に思っていますか?これまでの私の考えは次のとおりです。

  1. 私はそれを間違って使用しています、そしてそれをするより良い方法があります。
  2. throws MyExceptionテストメソッドに追加するだけです
  3. 例外を飲み込むだけの別のメソッドへの呼び出しを抽出します

例えば

private void givenFooThrowsAnException(MyObject myObject) {
    try {
        doThrow(MyException.class).when(myObject).foo();
    } catch (MyException e) {
        // Required to stub a checked exception
    }
}
4

1 に答える 1

2

スタブはチェックされた例外を処理するように強制しますが、実際にはその例外をスローすることはありません。最も洗練されたアプローチは、その例外をスローするテストメソッドを宣言することです。

このアプローチには注意点が1つだけあります。@Testテストで、チェックされた例外がアノテーションで宣言されてスローされたことを実際に確認した場合。

@Test(expected=MyException.class)
public void test...() throws MyException {
    //...
}

その場合、スタブが台無しになり、チェックされた例外がスローされると、おそらく失敗したはずの合格テストが生成される可能性があります。

または、チェックされていない例外を使用することもできます。

于 2013-03-04T19:35:07.210 に答える