使用PowerMockito模拟void返回类型的方法:"无效的void参数"

时间:2014-09-10 19:47:23

标签: java unit-testing mockito powermock

我在尝试单元测试java代码时遇到了一些麻烦,这些代码在某些时候调用了本机方法。基本上,我试图使用PowerMockito来模拟最终将调用native的类。我能够很好地模拟非void方法,但是当我尝试模拟void返回类型的方法时,我不断收到编译错误。以下是我尝试测试的代码示例:

public class ClassThatCallsNative {

    void initObject(ByteBuffer param1, int param2) {
        //calls native
    }

    int getId(int param1) {
        //calls native
    }
}

我在我的测试类中有这个代码:

PowerMockito.when(mClassThatCallsNative.getId(Mockit.anyInt())).thenReturn(0);

这行代码编译得很好,但是以下行是编译错误的地方:

PowerMockito.when(mClassThatCallsNative.initObject(Mockit.any(ByteBuffer.class), anyInt())).doNothing();

错误消息只是说无效的void参数并指向.initObject。 知道我做错了吗?

3 个答案:

答案 0 :(得分:0)

对于void方法,您需要使用下面的

PowerMockito.doNothing()。when(mClassThatCallsNative.initObject(Mockit.any(ByteBuffer.class),anyInt()))

答案 1 :(得分:0)

最后找出问题所在。结果我需要ClassThatCallsNative的实例来模拟它的方法。以前发生的事情是对象是在构造函数调用中初始化的,但是当我创建另一个将ClassThatCallsNative作为参数的构造函数,并将我的实例设置为相反时,一切正常。

谢谢你!

答案 2 :(得分:0)

由于你试图模拟返回void的方法,你根本无法在()方法中调用它。这是因为PowerMockito.when()方法需要T methodCall但是无效,这就是编译失败的原因。 相反,您应该使用以下语法:

PowerMockito.doNothing().when(mClassThatCallsNative).initObject(any(ByteBuffer.class), anyInt())

any()和anyInt()方法是Mockito类的一部分。