[英]How to mock a void static method to throw exception with Powermock?
我试图使用Powermock和Mockito来模拟一个void静态方法来抛出异常,如下所示。 但我遇到了一个问题。 除非我使用相同的参数对Adder.add()进行两次调用,否则不会抛出模拟的IOException
。
顺便说@RunWith(PowerMockRunner.class)
,我已经将@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());
答案如下。
在咨询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());
编辑:
链接已死,请尝试使用Internet Archive 1。
要么
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class, "add", Mathers.eq(12));
您是否忘记将PowerMock置于重放模式?
根据你的链接......
如何验证行为静态方法的验证分两步完成。 首先调用PowerMockito.verifyStatic()
以开始验证行为并调用要验证的静态方法。 例如
PowerMockito.verifyStatic();
Static.firstStaticMethod(param);
重要提示:您需要按方法验证调用verifyStatic()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.