【问题标题】:Why doesn't "mvn verify" run my integration tests?为什么“mvn verify”不运行我的集成测试?
【发布时间】:2015-11-25 18:10:24
【问题描述】:

我有一个多模块项目,我在根 pom 中定义了故障安全,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19</version>
    <configuration>
        <includes>
            <include>**/*IntegrationTest.java</include>
            <include>**/*JourneyTest.java</include>
            <include>**/*CucumberFeatureTest.java</include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19</version>
    <configuration>
        <excludes>
            <exclude>**/*IntegrationTest.java</exclude>
            <exclude>**/*JourneyTest.java</exclude>
            <exclude>**/*CucumberFeatureTest.java</exclude>
        </excludes>
    </configuration>
</plugin>

Failsafe 没有在我的其他 pom 中的任何其他地方定义。如果我运行mvn verify,它会跳过集成测试(它会运行单元测试)。但如果我运行mvn test-compile failsafe:integration-test,它会运行集成测试。

我假设故障安全应该在这两种情况下运行。那么为什么当我输入mvn verify 时它不运行呢?

更新:刚刚注意到这是围绕这些标签:

<build>
    <pluginManagement> <!-- oops -->
        <plugins>
            <plugin>

我觉得这解释了原因,但我不确定为什么 unit 测试仍然像您对 mvn verifymvn test 所期望的那样运行。为什么在这方面,surefire 与 failsafe 的工作方式不同?

【问题讨论】:

  • 我相信 Surefire 包含在标准 POM 中,但 Failsafe 没有。

标签: java maven maven-failsafe-plugin


【解决方案1】:

您需要将故障安全的集成测试目标绑定到 maven 的 integration-testverify 阶段。默认情况下,故障安全插件不包含在vanilla maven 项目中。您需要添加它。因此,即使有 integration-test 生命周期,默认情况下也不包括在内(好吧,至少不运行 maven-failsafe-plugin)。您将它添加到integration-testverify 阶段(它需要两者,它只会在verify 阶段失败[如果前面的集成测试失败],因此post-integration 生命周期阶段仍然有运行和清理资源的机会,因此得名“故障安全”)。

   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-failsafe-plugin</artifactId>
       <version>2.19</version>
       <configuration>
           <includes>
               <include>**/*IntegrationTest.java</include>
               <include>**/*JourneyTest.java</include>
               <include>**/*CucumberFeatureTest.java</include>
           </includes>
       </configuration>
       <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
   </plugin>

【讨论】:

  • 该更改对结果没有影响。我将更新原始问题以包含此
  • 是的,将故障保护插件绑定到执行是正确的解决方案。不幸的是,与许多 Maven 文档一样,它并没有很好地指出。此设置记录在failsafe plugin's official docs
  • 对于追随者,请参阅 Daniel Kaplan 对问题的“更新”,了解为什么它不会影响他的结果(但仍然是正确答案)。
【解决方案2】:

我在运行 mvn verify 时遇到了类似的问题,因为没有执行集成测试,而只执行了单元测试。 在将 skipTests 标记为 false 后它起作用了:

<plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.19.1</version>
                    <configuration>
                        <skipTests>false</skipTests>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>           
</plugin>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2021-08-14
    • 2021-06-26
    相关资源
    最近更新 更多