私はPowermockとMockitoを使って、以下のように例外をスローするvoid静的メソッドを模倣しようとしています。しかし、私は問題に会った。同じ引数を指定してAdder.add()を2回起動しない限り、IOException
は投げられません。Powermockで例外をスローするためにvoid静的メソッドをモックする方法はありますか?
私は@RunWith(PowerMockRunner.class)
と@PrepareForTest(Adder.class)
をユニットテストクラスに追加しました。
class Adder{
public static void add(int i) throws IOException{
return;
}
}
@Test
public void testAdder() throws IOException{
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(12);
try {
Adder.add(11);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// assert things
}
ありがとうございます。 :)
回答は以下の通りです。
ここでは、http://code.google.com/p/powermock/issues/detail?id=278を参考にして、実際には上記のAdder.add(12)はモック静的メソッドを設定する作業の一部です。つまり、引数12でAdder.add()を呼び出すと、IOExceptionがスローされます。理解するのは難しいですね。 :)それは以下のように書かれるべきです。
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());
これは直感的ではありません。この仕事を得るために苦労しました。先端に感謝します。 – Dhiraj
'Adder.add(anyInt());'はここで例外を引き起こすものではなく、 'Adder.add()'の呼び出しにそれを適用することに注意してください。 – sjngm