2016-04-27 62 views
1

我正在研究Maven based Java open source project hosted on Github。我們使用Travis進行持續集成。從Travis中排除測試

一些更復雜的JUnit測試目前不通過Travis環境,儘管它們通過本地傳遞。

問題:是否有一個快速簡便的方法來標記特定的測試類或方法爲「不要在特拉維斯運行」所以當我弄清楚如何解決這些測試的特拉維斯環境,我們能夠向前邁進?

+1

我會問爲什麼這些測試不能在travis上運行?所以你在測試中做了一些你不應該做的事情,因爲你說它們在本地運行,但是在Travis中它們不運行......我會深入研究這些測試,爲什麼它們不能運行在travis上。 。 – khmarbaise

回答

2

可能的解決方案是將maven profile添加到相關項目中,並將maven-surefire-plugin配置爲exclude這些測試從其測試目標執行中。

一個例子是:

<profiles> 
    <profile> 
     <id>trasis</id> 
     <build> 
      <plugins> 
       <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.19.1</version> 
       <configuration> 
        <excludes> 
        <!-- exclude tests here --> 
        <exclude>**/TestCircle.java</exclude> 
        <exclude>**/TestSquare.java</exclude> 
        </excludes> 
       </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

然後你trasis構建應該運行

mvn clean install -Ptrasis 

這將:

  • 激活上述
  • 輪廓應用自定義配置Surefire Plugin
  • 排除在測試階段

這個資料配置測試(模式),則可以通過本地忽略建立同時仍然活躍Trasis。一旦問題得到解決,它就可以從trasis配置和pom文件本身完全刪除。


另外,特別是如果你不能改變有關POM文件,您可以排除使用test選項和精心設計的正則表達式測試(和方法):

由於2.19複雜的語法支撐在一個參數(JUnit 4中,的JUnit 4.7+,TestNG的):
-Dtest=???Test, !Unstable*, pkg/**/Ci*leTest.java, *Test#test*One+testTwo?????, #fast*+slowTest
-Dtest=Basic*, !%regex[.*.Unstable.*], !%regex[.*.MyTest.class#one.*|two.*], %regex[#fast.*|slow.*]

mvn clean install -Dtest=*Test,!FromThisClass#excludeThisMethod