java - 如何模拟 void 静态方法以使用 Powermock 引发异常?

标签 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 
}

提前致谢。 :)

答案如下。

在这里咨询后http://code.google.com/p/powermock/issues/detail?id=278 ,其实上面的 Adder.add(12) 就是设置 mock 静态方法的一部分。这意味着当使用参数 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) 就是设置 mock 静态方法的一部分。这意味着当使用参数 12 调用 Adder.add() 时,将抛出 IOException。这很难理解,对吧? :) 所以应该写成下面这样。

PowerMockito.mockStatic(Adder.class);
PowerMockito.doThrow(new IOException()).when(Adder.class);
Adder.add(anyInt());

编辑:
链接失效,试试Internet Archive一个。

关于java - 如何模拟 void 静态方法以使用 Powermock 引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483628/

相关文章:

java - 如何将线程添加到 ArrayList

java - 使用 Apache FTPClient 通过代理连接到 FTP 服务器

java - 我可以用另一个采用相同参数但具有不同返回类型的方法重载一个方法吗?

java - 我有一个打开 GUI 的按钮,如何设置 GUI 在屏幕上显示的位置?

java - 覆盖不起作用

javascript - Karma (mocha) - 每当单元测试失败时出现意外的标记 N

c# - 值在索引 1 处不同 - 对于相等的嵌套数组

java - 如何对构造函数进行单元测试

java - 在方法内部调用方法时模拟异常

java - 在抽象类中模拟静态方法