为什么"mvn verify"没有运行我的集成测试?

Dan*_*lan 10 java maven maven-failsafe-plugin

我有一个多模块项目,我在root pom中定义了failafe,如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

<build>
    <pluginManagement> <!-- oops -->
        <plugins>
            <plugin>
Run Code Online (Sandbox Code Playgroud)

我觉得这解释了原因,但我不知道为什么单元测试仍然运行像你期待与mvn verifymvn test.为什么在这方面,surefire与故障保护的工作方式不同?

JJF*_*JJF 8

您需要将failsafe的集成测试目标绑定到maven integration-testverify阶段.默认情况下,failsafe-plugin不包含在vanillamaven项目中.你需要添加它.因此,即使存在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>
Run Code Online (Sandbox Code Playgroud)