运行 项目构建作为单元测试的一部分?
Run a project build as part of a Unit test?
我有一个 Java 项目,我想在其中添加一个单元测试 maven builds
一个示例项目 (shaded-jar
),运行这个创建的 jar 并评估一个书面输出文件.
我不确定这在单元测试中是否可行?
我过去在单元测试实际通过时遇到过问题,但是一旦你创建了一个阴影 jar,事情就会因为一些似乎只发生在 JAR 文件中的依赖性问题而中断。
我正在寻找一些 keywords
甚至更好的示例,了解如何做到这一点或如何实施这种集成测试。
根据@khmarbaise 的评论:
将 maven-failsafe-plugin 添加到您的构建以执行集成测试:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
运行 你的罐子来自 maven-exec-plugin。例如:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.5.0</version>
<executions>
<execution>
<phase>pre-integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>java</executable>
<workingDirectory>${project.build.directory}</workingDirectory>
<commandlineArgs>-jar ${project.build.finalName}.jar</commandlineArgs>
</configuration>
</execution>
</executions>
</plugin>
运行 Maven 构建至少达到 verify
阶段,例如:mvn clean verify
.
重要提示:
- 您的 jar 可能没有 return(不会分叉到单独的进程中),因此您也需要使用
async=true
。由于 asyncDestroyOnShutdown
默认为 true
,因此应该会在构建结束时自动停止。如果您的 jar 分叉,您应该在 post-integration-test 阶段通过您自己的手动停止命令停止分叉进程。
- 使用 war 或 uber-jar(其中包括所有依赖项)要容易得多,因为否则您还需要在类路径上添加所有依赖项,这将需要额外的工作。
- 如果您使用类似 appassembler-maven-plugin 的东西来处理类路径和启动,您可以简单地 运行 这个插件的输出。
我有一个 Java 项目,我想在其中添加一个单元测试 maven builds
一个示例项目 (shaded-jar
),运行这个创建的 jar 并评估一个书面输出文件.
我不确定这在单元测试中是否可行?
我过去在单元测试实际通过时遇到过问题,但是一旦你创建了一个阴影 jar,事情就会因为一些似乎只发生在 JAR 文件中的依赖性问题而中断。
我正在寻找一些 keywords
甚至更好的示例,了解如何做到这一点或如何实施这种集成测试。
根据@khmarbaise 的评论:
将 maven-failsafe-plugin 添加到您的构建以执行集成测试:
<plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>2.19.1</version> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin>
运行 你的罐子来自 maven-exec-plugin。例如:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.5.0</version> <executions> <execution> <phase>pre-integration-test</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>java</executable> <workingDirectory>${project.build.directory}</workingDirectory> <commandlineArgs>-jar ${project.build.finalName}.jar</commandlineArgs> </configuration> </execution> </executions> </plugin>
运行 Maven 构建至少达到
verify
阶段,例如:mvn clean verify
.
重要提示:
- 您的 jar 可能没有 return(不会分叉到单独的进程中),因此您也需要使用
async=true
。由于asyncDestroyOnShutdown
默认为true
,因此应该会在构建结束时自动停止。如果您的 jar 分叉,您应该在 post-integration-test 阶段通过您自己的手动停止命令停止分叉进程。 - 使用 war 或 uber-jar(其中包括所有依赖项)要容易得多,因为否则您还需要在类路径上添加所有依赖项,这将需要额外的工作。
- 如果您使用类似 appassembler-maven-plugin 的东西来处理类路径和启动,您可以简单地 运行 这个插件的输出。