Sma*_*key 28 java unit-testing mockito powermock
我试图使用Powermock和Mockito来模拟一个void静态方法来抛出异常,如下所示.但我遇到了一个问题.除非我使用相同的参数对Adder.add()进行两次调用,否则IOException不会抛出模拟的东西.
顺便说一句,我已经添加@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
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.:)
答案如下.
在咨询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());
Run Code Online (Sandbox Code Playgroud)
Sma*_*key 29
答案如下.
在咨询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());
Run Code Online (Sandbox Code Playgroud)
编辑:
链接已死,请尝试使用Internet Archive 1.
要么
PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class, "add", Mathers.eq(12));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33518 次 |
| 最近记录: |