java – 如何添加本地库路径到JUNIT任务?

前端之家收集整理的这篇文章主要介绍了java – 如何添加本地库路径到JUNIT任务?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Java项目,使用 this driver进行串行通信.驱动程序使用Windows下的dll来创建串行端口.

该项目包含几个JUnit测试,使用“运行为 – > JUnit测试”成功完成.但是,当运行ant(和不引用本机库通过的测试)时,引用本机库的测试失败.

到目前为止,我最好的猜测是将包含本机库的目录添加到java.library.path中,但是我没有通过build.xml文件成功.

有人可以告诉(干净)解决方案吗?

这是我的build.xml:

  1. <path id="compile.classpath">
  2. <fileset dir="${lib}">
  3. <include name="**/*.jar"/>
  4. </fileset>
  5. <fileset dir="${junit_home}">
  6. <include name="**/*.jar"/>
  7. </fileset>
  8. </path>
  9.  
  10. <path id="test.classpath">
  11. <pathelement location="${bin}" />
  12. <fileset dir="${lib}">
  13. <include name="**/*.jar"/>
  14. </fileset>
  15. <fileset dir="${junit_home}">
  16. <include name="**/*.jar"/>
  17. </fileset>
  18. </path>
  19.  
  20. <target name="compile">
  21. <mkdir dir="${bin}" />
  22. <echo Message="Compiling src folder..." />
  23. <javac includeantruntime="no" classpathref="compile.classpath" srcdir="${src}" destdir="${bin}" />
  24. <echo Message="Compiling test folder..." />
  25. <javac includeantruntime="no" classpathref="compile.classpath" srcdir="${test}" destdir="${bin}" />
  26. </target>
  27.  
  28. <target name="test">
  29. <mkdir dir="${test.reports}" />
  30. <junit fork="yes" printsummary="yes" haltonfailure="yes">
  31. <test name="${test.class.name}" todir="${test.reports}" />
  32. <formatter type="xml" />
  33. <classpath refid="test.classpath" />
  34. </junit>
  35. </target>

这里是测试报告的一部分(以XML格式):

  1. <testcase classname="nl.timo.comport.test.buildservertests.ComportFactoryTest" name="testGetInstance" time="0.0" />
  2. <testcase classname="nl.timo.comport.test.buildservertests.ComportFactoryTest" name="testCreateDefaultComport" time="0.016">
  3. <error message="giovynet.nativelink.SerialPort.getStateSerialPortC(Ljava/lang/String;)Ljava/lang/String;" type="java.lang.UnsatisfiedLinkError">java.lang.UnsatisfiedLinkError: giovynet.nativelink.SerialPort.getStateSerialPortC(Ljava/lang/String;)Ljava/lang/String;
  4. at giovynet.nativelink.SerialPort.getStateSerialPortC(Native Method)
  5. at giovynet.nativelink.SerialPort.getFreeSerialPort(SerialPort.java:50)
  6. at package.comport.GioComport.getFreeSerialPorts(Unknown Source)
  7. at package.comport.GioComport.findDevice(Unknown Source)
  8. at package.comport.GioComport.&lt;init&gt;(Unknown Source)
  9. at package.comport.ComportFactory.createNewPort(Unknown Source)
  10. at package.comport.ComportFactory.createComport(Unknown Source)
  11. at package.comport.test.buildservertests.ComportFactoryTest.testCreateDefaultComport(Unknown Source)
  12. </error>
  13. </testcase>
  14. <testcase classname="nl.timo.comport.test.buildservertests.ComportFactoryTest" name="testCreateComportWithWrongSettings" time="0.0">
  15. <error message="giovynet.nativelink.SerialPort.getStateSerialPortC(Ljava/lang/String;)Ljava/lang/String;" type="java.lang.UnsatisfiedLinkError">java.lang.UnsatisfiedLinkError: giovynet.nativelink.SerialPort.getStateSerialPortC(Ljava/lang/String;)Ljava/lang/String;
  16. at giovynet.nativelink.SerialPort.getStateSerialPortC(Native Method)
  17. at giovynet.nativelink.SerialPort.getFreeSerialPort(SerialPort.java:50)
  18. at package.comport.GioComport.getFreeSerialPorts(Unknown Source)
  19. at package.comport.GioComport.findDevice(Unknown Source)
  20. at package.comport.GioComport.&lt;init&gt;(Unknown Source)
  21. at package.comport.ComportFactory.createNewPort(Unknown Source)
  22. at package.comport.ComportFactory.createComport(Unknown Source)
  23. at package.comport.test.buildservertests.ComportFactoryTest.testCreateComportWithWrongSettings(Unknown Source)
  24. </error>
  25. </testcase>
  26. <system-out><![CDATA[]]></system-out>
  27. <system-err><![CDATA[java.lang.UnsatisfiedLinkError: no libSerialPort in java.library.path
  28. at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)

解决方法

junit task in Ant,允许设置系统属性,就像其他一些任务一样.您需要在sysproperty嵌套元素中指定java.library.path值:
  1. <junit fork="yes" printsummary="yes" haltonfailure="yes">
  2. <test name="${test.class.name}" todir="${test.reports}" />
  3. <formatter type="xml" />
  4. <classpath refid="test.classpath" />
  5. <sysproperty key="java.library.path" value="put your library path here"/>
  6. </junit>

猜你在找的Java相关文章