2013-10-20 9 views
8

例外をスローするvoidメソッドを嘲笑しているときに、なぜ例外を処理する必要があるのか​​を知りたい。今Mockito、チェック例外を持つvoidメソッド

例えば

public class MyObject { 
    public void call() throws SomeException { 
     //do something 
     } 
} 

私はこれをやっている、

@Mock 
MyObject myObject; 

doNothing().when(myObject).call() 

それは私が例外を処理する必要がある理由私は、疑問に思って

"error: unreported exception SomeException; must be caught or declared to be thrown"

を言ってコンパイルエラーが発生この方法自体は嘲笑されています。

+2

あなたはそれを処理する必要はありません。あなたのテストメソッドに '例外をスローする'だけを入れてください。私はJUnitのすべてのメソッドに「習慣の問題として例外をスローする」とマークしています。そうしなければならない理由はありません。 –

+0

@DawoodibnKareemテストが例外をスローするはずであることを伝えたいときには、例えば '@Test(expected = ...)'のようにアサーションヘルパーを使います。私はテストメソッドのシグネチャに 'throws'節を避けるようにしています。なぜなら、テスト自体の有用な情報がないからです。 –

答えて

7

JavaでMockitoを使用してオブジェクトをモックするとき。フレームワークは言語仕様に何も変わりません。 Javaでは、throws節がコンパイル時に定義されています。実行時に宣言された例外を変更することはできません。あなたの場合、メソッドMyObject.call()を呼び出す場合は、通常のJavaコードのようにSomeExceptionを処理する必要があります。

ユニットテストでは、テストしていないものを扱いたくないので、あなたの場合、私は単に試験方法にthrows SomeExceptionを再宣言します。

関連する問題