【问题标题】:Run a project build as part of a Unit test?作为单元测试的一部分运行项目构建?
【发布时间】:2016-05-29 13:09:19
【问题描述】:

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

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

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

【问题讨论】:

  • 这是一个集成测试,可以使用 maven-invoker-plugin 处理,主要用于在 maven 插件开发期间运行集成测试,但也可以用于其他目的。或者您可以查看 exec-maven-plugin,这在这里也可能有所帮助...
  • 谢谢,我看了一下。我现在有了构建sample 项目的步骤,但我不知道如何告诉maven 实际执行这个-jar 文件并将参数传递给它?

标签: java maven junit integration-testing


【解决方案1】:

根据@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 build 至少到 verify 阶段,例如:mvn clean verify

重要提示:

  • 您的 jar 可能不会返回(不会分叉到单独的进程中),因此您也需要使用 async=true。由于asyncDestroyOnShutdown 默认为true,它应该在构建结束时自动停止。如果您的 jar 分叉,您应该在集成测试后阶段通过您自己的手动停止命令停止分叉进程。
  • 使用 war 或 uber-jar(其中包含所有依赖项)要容易得多,因为否则您还需要在类路径中添加所有依赖项,这将需要额外的努力。
  • 如果您使用 appassembler-maven-plugin 之类的东西来处理类路径和启动,您可以简单地运行此插件的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2011-04-06
    • 2011-03-30
    • 2021-07-31
    • 2010-12-09
    • 2018-02-26
    相关资源
    最近更新 更多