以下のように、Powermock と Mockito を使用して void static メソッドをモックし、例外をスローしようとしています。しかし、私は問題に遭遇しました。同じ引数で Adder.add() の 2 つの呼び出しを行わない限り、モックIOException
はスローされません。
ところで、ユニット テスト クラスに@RunWith(PowerMockRunner.class)
andを追加しました。@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());