我正在尝试使用 Powermock 和 Mockito 来模拟一个 void 静态方法来抛出异常,如下所示。但是我遇到了一个问题。除非我使用相同的参数对 Adder.add() 进行两次调用,否则IOException
不会抛出 mocked。
顺便说一句,我已将@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());