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

Run a project build as part of a Unit test?

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

我不确定这在单元测试中是否可行?

我过去在单元测试实际通过时遇到过问题,但是一旦你创建了一个阴影 jar,事情就会因为一些似乎只发生在 JAR 文件中的依赖性问题而中断。 我正在寻找一些 keywords 甚至更好的示例,了解如何做到这一点或如何实施这种集成测试。

根据@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。例如:

    <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 可能没有 return(不会分叉到单独的进程中),因此您也需要使用 async=true。由于 asyncDestroyOnShutdown 默认为 true,因此应该会在构建结束时自动停止。如果您的 jar 分叉,您应该在 post-integration-test 阶段通过您自己的手动停止命令停止分叉进程。
  • 使用 war 或 uber-jar(其中包括所有依赖项)要容易得多,因为否则您还需要在类路径上添加所有依赖项,这将需要额外的工作。
  • 如果您使用类似 appassembler-maven-plugin 的东西来处理类路径和启动,您可以简单地 运行 这个插件的输出。