junit4测试本机方法

时间:2014-10-29 13:45:17

标签: java-native-interface native java.library.path

我使用jni来调用.so(共享库)。

在执行环境中一切正常。

但是我想对它们添加一些单元测试。

我有一个依赖于libUtil_Cade.so的libCBareme.so

我使用maven2.2.1和surefire插件,我在pom.xml文件中添加:

 <configuration>
             <forkMode>once</forkMode>
             <workingDirectory>target</workingDirectory>
             <argLine>-Djava.library.path=${project.basedir}/src/test/resources/om_lib/</argLine>
 </configuration>

我添加了System.out.println(System.getProperty(“java.library.path”));正如您在下一个日志中看到的那样,路径正常。

但是当我启动测试时,我得到:

TrtBaremeTest  Time elapsed: 3.032 sec  <<< ERROR!
java.lang.UnsatisfiedLinkError: /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libCBareme.so: libUtil_CADE.so: cannot open shared object file: No such file or directory

在这个目录中我有

ls /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/*.so    /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libCBareme.so    /data/tmp/pam/workspace/CTR_SCA/OutilsMetier/src/test/resources/om_lib/libUtil_CADE.so

为什么我的单元测试会说cannot open shared object file

我不会在%JAVA_HOME%\ bin中添加.so,因为它是单元测试所以我不想依赖于平台。

有人有想法解决这个问题吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

我试试这个:

     <configuration>
           <forkMode>once</forkMode>
           <workingDirectory>target</workingDirectory>
           <environmentVariables>
               <LD_LIBRARY_PATH>${project.basedir}/src/test/resources/om_lib/</LD_LIBRARY_PATH>
            </environmentVariables>
     </configuration>

它似乎有效!

但是在Windows上它没有用,我发现我需要用PATH替换LD_LIBRARY_PATH:

  <configuration>
           <forkMode>once</forkMode>
           <workingDirectory>target</workingDirectory>
           <environmentVariables>
               <PATH>${project.basedir}/src/test/resources/om_lib/</PATH>
            </environmentVariables>
     </configuration>

在调试模式中我看到了      设置环境变量[PATH] = [d:\ MarcoPolo \ SVN \ CASTOR_trunk \ CTR_SCA \ OutilsMetier .. \ OM_LIB_DLL]

但我放了一个system.out.println来查看我的java.library.path并且我的路径不是像linux下那样添加:(

有人找到了这个问题吗?

我发布这个作为答案,如果它可以帮助