2016-04-27 69 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