java - 运行项目构建作为单元测试的一部分?

标签 java maven junit integration-testing

我有一个 Java 项目,我想在其中添加一个单元测试,maven 构建一个示例项目 (shaded-jar),运行这个创建的 jar 并评估写入输出文件。

我不确定这是否可以在单元测试中实现?

过去,当单元测试实际通过时,我遇到了问题,但是一旦创建了阴影 jar,由于一些似乎只发生在 JAR 文件中的依赖关系问题,事情就会中断。 我正在寻找一些关键字,甚至更好的示例如何做到这一点或如何实现这种集成测试。

最佳答案

根据@khmarbaise 的评论:

  1. 添加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>
    
  2. 通过 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>
    
  3. 运行 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/

相关文章:

java - 如何检查 JSP 是否连接到数据库?

java - 在静态java方法中访问类

java - 无法运行 mvn clean

android - Eclipse Juno 和 android maven 插件

java - 配置本地 Nexus 服务器以从其他远程 Nexus 存储库下载 Artifact

java - 为什么 JUnit 不起作用以及为什么会出现错误?

java - 使用 JUnit 作为验收测试框架

java - JMockit模拟目标类的方法

java - 如何解析只有日期名称的日期?

java - Jackson 读取 JSON 并转换为 Map<String,Object>