如何运行 Maven 集成测试

2022-08-31 06:26:10

我有一个 maven2 多模块项目,在我的每个子模块中,我都有 JUnit 测试,这些测试分别用于单元测试和集成测试。当我执行时:Test.javaIntegration.java

mvn test

将执行子模块中的所有 JUnit 测试。当我执行时*Test.java

mvn test -Dtest=**/*Integration

没有一个测试在子模块中执行。Integration.java

这些对我来说似乎是完全相同的命令,但是带有-Dtest=/*Integration**的命令不起作用,它显示0个测试在父级别运行,没有任何测试


答案 1

Maven 构建生命周期现在包括用于运行集成测试的“集成-测试”阶段,该阶段与在“测试”阶段运行的单元测试分开运行。它在“包”之后运行,因此,如果您运行“mvn verify”,“mvn install”或“mvn deploy”,则集成测试将在此过程中运行。

缺省情况下,集成测试运行名为 、 和 的测试类,但可以对此进行配置。**/IT*.java**/*IT.java**/*ITCase.java

有关如何连接这一切的详细信息,请参阅Failsafe插件Failsafe使用页面(在我写这篇文章时未正确链接到上一页),并查看此Sonatype博客文章


答案 2

您可以设置 Maven 的 Surefire 以分别运行单元测试和集成测试。在标准单元测试阶段,您运行与集成测试不匹配的所有模式。然后,创建仅运行集成测试的第二个测试阶段

下面是一个示例:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <excludes>
          <exclude>**/*IntegrationTest.java</exclude>
        </excludes>
      </configuration>
      <executions>
        <execution>
          <id>integration-test</id>
          <goals>
            <goal>test</goal>
          </goals>
          <phase>integration-test</phase>
          <configuration>
            <excludes>
              <exclude>none</exclude>
            </excludes>
            <includes>
              <include>**/*IntegrationTest.java</include>
            </includes>
          </configuration>
        </execution>
      </executions>
    </plugin>