小编sas*_*our的帖子

使用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
    }
}
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.知道我做错了什么吗?

java unit-testing mockito powermock

5
推荐指数
1
解决办法
3206
查看次数

在 java.library.path 中找不到库

我是 JNI 的新手,所以我之前尝试过 JNI 入门教程,该教程仅调用本机来打印 Hello World!一切都很顺利,直到我想运行java文件时,我不断收到错误:线程“main”中的异常:java.lang.UnsatisfiedLinkError:在java.library.path中找不到hello库。我用谷歌搜索了这个错误并查看了很多人的建议,但不幸的是没有一个对我有用!我已经尝试过以下方法:

  • 使用命令运行: java -Djava.library.path = "库路径" HelloWorld
  • 将 LD_LIBRARY_PATH 设置为我的 .so 路径

其他人在执行上述两项操作之一后都解决了问题,但我没有!

这是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 的实际目录,但它仍然给我同样的错误!

java java-native-interface

4
推荐指数
1
解决办法
2万
查看次数