我有一个 Java 项目,我想在其中添加一个单元测试,maven 构建
一个示例项目 (shaded-jar
),运行这个创建的 jar 并评估写入输出文件。
我不确定这是否可以在单元测试中实现?
过去,当单元测试实际通过时,我遇到了问题,但是一旦创建了阴影 jar,由于一些似乎只发生在 JAR 文件中的依赖关系问题,事情就会中断。
我正在寻找一些关键字
,甚至更好的示例如何做到这一点或如何实现这种集成测试。
最佳答案
根据@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 运行你的 jar 。例如:
<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 可能不会返回(不会 fork 到单独的进程中),因此您还需要使用
async=true
。由于asyncDestroyOnShutdown
默认为true
,因此当构建结束时它应该自动停止。如果您的 jar fork ,您应该在集成后测试阶段通过您自己的手动停止命令停止 fork 进程。 - 使用 war 或 uber-jar(其中包含所有依赖项)会更容易,因为否则您还需要在类路径上添加所有依赖项,这将需要额外的工作。
- 如果您使用类似 appassembler-maven-plugin 的内容它将处理类路径和启动,您只需运行此插件的输出即可。
关于java - 运行项目构建作为单元测试的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37510298/