我正在研究Maven based Java open source project hosted on Github。我们使用Travis进行持续集成。
一些更复杂的JUnit测试目前没有在Travis环境中传递,尽管它们确实在本地传递。
问题:有没有一种快速简便的方法可以将特定的测试类或方法标记为“不要在Travis上运行”,这样我们就可以在找到如何修复Travis环境时向前推进这些测试?
答案 0 :(得分: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
将会:
当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