我在尝试单元测试java代码时遇到了一些麻烦,这些代码在某些时候调用了本机方法.基本上,我试图用来PowerMockito模拟最终会调用native的类.我能够很好地模拟非void方法,但是当我尝试模拟void返回类型的方法时,我不断收到编译错误.以下是我要测试的代码示例:
public class ClassThatCallsNative {
void initObject(ByteBuffer param1, int param2) {
//calls native
}
int getId(int param1) {
//calls native
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的测试类中有这个代码:
PowerMockito.when(mClassThatCallsNative.getId(Mockit.anyInt())).thenReturn(0);
Run Code Online (Sandbox Code Playgroud)
这行代码编译得很好,但是以下行是编译错误的地方:
PowerMockito.when(mClassThatCallsNative.initObject(Mockit.any(ByteBuffer.class), anyInt())).doNothing();
Run Code Online (Sandbox Code Playgroud)
错误消息只是说无效的void参数并指向.initObject.知道我做错了什么吗?
我是 JNI 的新手,所以我之前尝试过 JNI 入门教程,该教程仅调用本机来打印 Hello World!一切都很顺利,直到我想运行java文件时,我不断收到错误:线程“main”中的异常:java.lang.UnsatisfiedLinkError:在java.library.path中找不到hello库。我用谷歌搜索了这个错误并查看了很多人的建议,但不幸的是没有一个对我有用!我已经尝试过以下方法:
其他人在执行上述两项操作之一后都解决了问题,但我没有!
这是Java代码:
public class HelloWorld {
static {
System.loadLibrary("hello");
}
private native void printHelloWorld();
public static void main(String[] args) {
new HelloWorld().printHelloWorld();
}
}
Run Code Online (Sandbox Code Playgroud)
Native 的代码如下:
void JNICALL Java_printHelloWorld(JNIEnv *env, jobject obj) {
printf("HelloWorld!");
}
Run Code Online (Sandbox Code Playgroud)
编辑:我什至尝试将库复制到 java.library.path 的实际目录,但它仍然给我同样的错误!