我在尝试单元测试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。 知道我做错了吗?
答案 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类的一部分。