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

时间:2016-05-29 13:09:19

标签: java maven junit integration-testing

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

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

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

1 个答案:

答案 0 :(得分:1)

根据@khmarbaise的评论:

  1. maven-failsafe-plugin添加到您的构建中以执行集成测试:

    func setConstrain()
    {
    self.imageConstrain.constant = -10
    self.topConstraints.constant = 10
    self.bottomConstraints.constant = -10
    self.leadingConstraints.constant = 10
    self.layoutIfNeeded()
    }
    
  2. 通过maven-exec-plugin运行您的jar。例如:

    <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>
    
  3. 至少运行maven build至<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> 阶段,例如:verify

  4. 重要说明:

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