从特拉维斯排除测试

时间:2016-04-27 11:27:13

标签: java maven testing continuous-integration tycho

我正在研究Maven based Java open source project hosted on Github。我们使用Travis进行持续集成。

一些更复杂的JUnit测试目前没有在Travis环境中传递,尽管它们确实在本地传递。

问题:有没有一种快速简便的方法可以将特定的测试类或方法标记为“不要在Travis上运行”,这样我们就可以在找到如何修复Travis环境时向前推进这些测试?

1 个答案:

答案 0 :(得分:2)

一种可能的解决方案是向相关项目添加maven profile,并从其测试目标执行中配置maven-surefire-pluginexclude这些测试。

一个例子是:

<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插件的自定义配置
  • 从测试阶段排除已配置的测试(模式)

当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