16

UT =単体テスト IT =統合テスト。Maven個別のユニットテストと統合テスト

mvn clean install>はUTではなくIT

mvn clean install -DskipTestsを実行します= =真=>何のテストが実行されません:すべての私の統合テストクラスが私の目標です@category(IntegrationTest.class)

でアノテートされています

mvn clean deploy => UTを実行していないITは

mvn clean test =>は、UTが実行されていないIT

mvn clean verify => UTを実行し、ITは

mvn clean integration-test => ITを実行し、UTは

mvn clean install deployは=> UTを実行していないIT

POM特性

実行されない:

<junit.version>4.12</junit.version> 
<surefire-plugin.version>2.18.1</surefire-plugin.version> 
<failsafe-plugin.version>2.18.1</failsafe-plugin.version> 
  1. コンパイラ:

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.5.1</version> 
        <configuration> 
         <source>1.8</source> 
         <target>1.8</target> 
         <compilerArgument>-Xlint:all</compilerArgument> 
         <showWarnings>true</showWarnings> 
         <showDeprecation>true</showDeprecation> 
        </configuration> 
    </plugin> 
    
  2. ユニットテスト:

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>${surefire-plugin.version}</version> 
        <configuration> 
         <excludedGroups>com.xpto.IntegrationTest</excludedGroups> 
        </configuration> 
    </plugin> 
    
  3. 統合テスト:

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-failsafe-plugin</artifactId> 
        <version>${failsafe-plugin.version}</version> 
        <configuration> 
         <groups>com.xpto.IntegrationTest</groups> 
        </configuration> 
        <executions> 
         <execution> 
          <goals> 
           <goal>integration-test</goal> 
          </goals> 
          <configuration> 
           <includes> 
            <include>**/*.class</include> 
           </includes> 
          </configuration> 
         </execution>     
        </executions>    
    </plugin>   
    

は私の結果は以下のとおりです。

mvn clean install => OK

mvn clean install -DskipTests =真=> OK

mvn clean deploy => UTが実行されていないIT

mvn clean test => OK

mvn clean verify => NOK ...唯一のUTが実行されますが、それはまた、実行する必要があります

mvn clean integration-test => NOK ... UTが実行され、それが実行されていないではないはずですが、実行する必要があります

mvn clean install deploy => OK

+0

サンプルテストを追加できますか?おそらくUTとIT。彼らがどのように名前を付けられ/編成され/注釈付けされているかが問題の一部であるかどうかは疑問だ。 –

+1

あなたの要件の少なくとも一部はおそらく実行できません... "mvn clean integration-test"はITと* UTではなく、Mavenのライフサイクルが連鎖でなければなりません...あなたが 'mvn integration-コンパイル、コンパイルテスト、テスト、パッケージなど、すべての方法で統合テストを実行します。とにかくあなたのUTは超高速でなければならないので、なぜあなたはそれらをスキップしたいですか? – dcsohl

+0

最初に私はユニットテスト '* Test.java'と統合テスト' * IT.java'(maven-surefire-plugin/maven-failsafe-pluginのドキュメントを参照)の命名に正しい命名規則を使用することを提案します。さらに、 'mvn clean install deploy'のようなことをすれば、これは意味をなさないでしょうし、ビルドライフサイクルを理解できませんでした。 'mvn deploy'を実行した場合、インストールはライフサイクルの一部であり、結果的に' mvn deploy'を使用するだけです。 'mvn clean deploy'という呼び出しがUTを実行するが、ITの設定が間違っている場合は間違っている。 – khmarbaise

答えて

18

解決策はこれです:

<build> 
    <pluginManagement> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.19.1</version> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.19.1</version> 
     </plugin> 
     </plugins> 
    </pluginManagement> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.6.1</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-failsafe-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <configuration> 
      <skip>${surefire.skip}</skip> 
     </configuration> 
     <executions> 
      <execution> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

これは、あなたが実行されるかを制御できるようになります。

UTを実行し、ITだ:

ITだUTの実行ではなく、ITだではなく、UTの

mvn clean verify -Dsurefire.skip=true 

を実行している

mvn clean verify 

mvn clean verify -DskipITs=true 

あなたはの命名規則に従う必要があります人生を楽にするプラグイン。

Naming conventions maven-surefire-plugin(ユニットテスト)用。Naming conventions for maven-failsafe-plugin(統合テスト)。

+0

これは完璧に機能しています。しかし、今では、私の統合テストはcoberturaプラグインによって傍受されません。なにか提案を?代わりにJaCoCoを使用していますか? – Leonel

+0

[cobertura-maven-plugin](http://www.mojohaus.org/cobertura-maven-plugin/)については、JaCoCoを使用することができるドキュメントを調べることをお勧めしますか? – khmarbaise

+0

関連するhttp:///stackoverflow.com/questions/33349864/merging-integration-and-unit-test-reports-with-jacoco – Leonel

関連する問題