web-dev-qa-db-ja.com

「mvnverify」が統合テストを実行しないのはなぜですか?

マルチモジュールプロジェクトがあり、ルート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>

フェイルセーフは、他のpomの他の場所では定義されていません。 mvn verifyを実行すると、統合テストがスキップされます(単体テストが実行されます)。しかし、mvn test-compile failsafe:integration-testを実行すると、統合テストが実行されます。

私は、フェイルセーフがこれらの両方の状況で実行されることになっていると想定しています。では、mvn verifyと入力すると、なぜ実行されないのですか?

[〜#〜] update [〜#〜]:これがこれらのタグにラップされていることに気づきました:

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

これが原因を説明しているように感じますが、なぜunitテストがmvn verifymvn testで期待どおりに実行されるのかわかりません。この点で、surefireがフェイルセーフとは異なる動作をするのはなぜですか?

10
Daniel Kaplan

フェイルセーフの統合テストの目標をMavenのintegration-testフェーズとverifyフェーズにバインドする必要があります。デフォルトでは、フェイルセーフプラグインはVanillamavenプロジェクトに含まれていません。追加する必要があります。したがって、integration-testライフサイクルがありますが、デフォルトでは含まれていません(少なくとも、maven-failsafe-pluginは実行されません)。これをintegration-testフェーズとverifyフェーズに追加します(両方が必要です。[前の統合テストが失敗した場合]、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>
8
JJF

統合テストは実行されず、単体テストのみが実行されたため、mvnverifyを実行したときに同様の問題が発生しました。 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>
1
Cristi B.
To activate plugin for IntegrationTest, 
add declaration maven-surefire-plugin at plugins/plugin: 

    <plugins>
            ...
            ...
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId> 
            </plugin>
  </plugins>
</build>
0