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