使用本机库神火的JUnit测试(Surefire JUnit Testing using Nativ

2019-06-23 18:07发布

我们在哈德森使用Maven来运行我们的Java构建过程,但是我已经运行到与单元测试一个项目,需要本机DLL问题Surefire插件执行JUnit测试。

我们所看到的错误是:

在错误测试:TestFormRegistrationServiceConnection(。com#productidentifierremoved#.test.RegistrationServiceTest):在没有的java.library.path身份验证

其中认证者是我们所需要的DLL的名称。 我发现这个职位的SO这表明,设置这一目标的唯一途径是通过argLine。 我们修改config来此:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>2.10</version>
        <configuration>
            <forkMode>once</forkMode>
            <argLine>-Djava.library.path=${basedir}\src\main\native\Authenticator\Release</argLine>
        </configuration>
    </plugin>

然而,这仍然给出了同样的错误,如果我们包括的System.out.println(System.getProperty(“的java.library.path”)); 我们可以看到,这是不被添加到路径。

任何想法如何才能解决这个问题?

Answer 1:

要在系统属性添加到JUnit测试中,配置的Maven Surefire插件如下:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <systemPropertyVariables>
          <java.library.path>${project.basedir}/src/main/native/Authenticator/Release</java.library.path>
        </systemPropertyVariables>
      </configuration>
    </plugin>
  </plugins>
</build>

更新:

好吧,看来这家酒店与JUnit测试在JVM启动之前设置。 所以我想,你有问题的反斜杠。 在Java属性值中的反斜杠用于转义特殊字符,如\t (制表)或\r\n (窗口新行)。 因此,尝试使用,而不是你的解决方案如下:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <forkMode>once</forkMode>
        <argLine>-Djava.library.path=${project.basedir}/src/main/native/Authenticator/Release</argLine>
      </configuration>
    </plugin>
  </plugins>
</build>


文章来源: Surefire JUnit Testing using Native Libraries