使用PowerMockito模拟具有void返回类型的方法:"invalid void parameter"



我在单元测试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。知道我做错了什么吗?

由于您正在尝试模拟返回void的方法,因此根本无法在when()方法内部调用它。这是因为PowerMockito.when()方法期望T methodCall,但得到了void,这就是编译失败的原因。相反,您应该使用以下语法:

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

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

对于void方法,您需要使用以下一个

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

终于弄清楚了问题所在。事实证明,我需要ClassThatCallsNative的实例来模拟它的方法。以前的情况是,对象是在构造函数调用中初始化的,但当我创建了另一个以ClassThatCallsNative为参数的构造函数,并将我的实例设置为该参数时,一切都很好。

无论如何,谢谢你!

相关内容

  • 没有找到相关文章

最新更新