0

我有一个创建 jni .so 文件和 java .jar 文件的项目。除了 JUnit 测试执行之外,所有这些都按预期工作。我需要在 native-maven-plugin 创建 .so 文件后运行 JUnit 测试。当添加新的 JNI 方法时,JUnit 测试总是会失败,因为它们是在创建共享库之前运行的。建造两次是唯一的选择吗?意思是构建一次跳过测试然后单独执行测试或再次运行构建以执行测试?

4

2 回答 2

0

我猜您正在使用native-maven-plugin中的native:link 目标?

如果您查看目标的文档,您会发现它默认绑定到生命周期阶段

junit 测试(由 maven-surefire-plugin 运行)默认在生命周期阶段测试中运行(https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html)。

Maven 生命周期参考中,您可以看到测试阶段在阶段之前。这解释了为什么在您进行更改后您的测试会失败。首先运行测试,然后生成 .so 文件。

您可以使用maven-failsafe-plugin在打包阶段之后运行测试。

将插件添加到您的构建中,并将打包后应运行的所有测试命名为MySpecificFeatureIT(后缀 IT 代表集成测试)。名为MyFeatureTest的测试仍将在测试阶段运行。

有关更多详细信息,请参阅插件文档

于 2019-05-22T09:59:59.153 回答
0

好的,这是一个项目结构问题。在我的 JNI .so 在我的 JNI 项目中构建之后,我试图让属于不同项目的测试运行。我需要做的是将我在 src/java/test 中创建的 JNI 集成测试放在 JNI 项目中,而不是另一个项目中,并尝试以某种方式对它们进行排序。

jni -  
     |  
     src  
       |  
       java  
           |  
           test  

不是

other project-
              |
              src
                 |
                 java
                     |
                     test

当然,在构建另一个项目之后,maven 会运行另一个项目测试。这就是它应该做的。尽管 JNI 项目构建了一个 C .so 文件。在运行 Java 测试时,Java 测试规则仍然适用于 JNI 项目。

于 2019-05-30T14:15:13.413 回答