2012-08-27 149 views
0

我遇到了一個問題,當我使用maven failsafe插件來運行集成測試。 我有兩個類,一個是TestUnitTest.java,另一個是TestIntegrationIT.java。 在pom.xml中,我配置如下:mvn集成測試vs mvn failsafe:集成測試

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

當我MVN運行:集成測試,將執行兩項測試,當我運行mvn故障安全:集成測試則只能運行「TestIntegrationIT」。爲什麼輸出不同的結果?

+0

你能顯示輸出日誌嗎? – khmarbaise

回答

1

的用於maven-surefire-plugin包括像*測試,*測試用例而maven-failsafe-pluginIT.java定義定義,IT的.java或* ITCase.java。所以你不需要爲maven-surefire-plugin或maven-failsafe-plugin使用默認值來定義包含。如果您不想命名集成測試,只需將其命名爲NameIT.java,而單元測試可命名爲NameTest.java。 要運行單元測試和/或集成測試,你應該使用lifecylce之一:

mvn package 

將運行單元測試,而

mvn verify 

將運行單元測試和集成測試。

+0

我知道原因並不像你提到的那樣。由於Maven具有默認生命週期,因此運行mvn integration-test時,該短語將首先運行mvn測試。所以需要添加定製的Maven生命週期來實現它。 – user1438980

+1

您應該運行mvn verfiy而不是mvn integration-test,導致整合後階段不會運行。 Furhtermore我建議根據規則命名你的測試,並檢查maven-surefire-plugin的文檔,因爲它有可能跳過測試。 – khmarbaise