我想在发布时只跳过一次测试mvn install
.
有没有办法做到这一点 ?
您可以-Dtest
通过在前面添加!
(感叹号)前缀来指定排除模式.例如,
mvn -Dtest=\!FlakyTest* install
在这里找到并验证工作.例如,我能够通过使用以下方式跳过这个片状的Jenkins测试:
mvn -Dtest=\!CronTabTest* package
使用junit 4时,我想添加一个@Ignore
注释.这对你有用,除非你有时只想忽略测试,或者只在构建从maven运行时忽略它.如果是这种情况,那么我会问"为什么?"
测试应该是一致的,它们应该是可移植的,并且它们应该总是通过.如果特定测试有问题,我会考虑重新编写,完全删除它,或将其移动到不同的测试套件或项目.
通常需要排除集成测试,但需要包含单元测试.为了实现这一点,我建议使用后缀IntegrationTest(例如AbcIntegrationTest.java)命名所有集成测试.
然后在你的maven构建中提出以下内容:
org.apache.maven.plugins maven-surefire-plugin **/*IntegrationTest.java
当您使用此构建时,将排除所有集成测试,但运行所有其他测试(例如,单元测试).完美:-)
有关排除和测试运行期间测试的更多信息,请阅读
http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
PS要排除单个测试,您只需在排除列表中明确命名.简单.
使用注释查看此解决方案@Category
public class AccountTest { @Test @Category(IntegrationTests.class) public void thisTestWillTakeSomeTime() { ... } @Test @Category(IntegrationTests.class) public void thisTestWillTakeEvenLonger() { ... } @Test public void thisOneIsRealFast() { ... } }
然后使用测试套件运行:
@RunWith(Categories.class) @IncludeCategory(SlowTests.class) @SuiteClasses( { AccountTest.class, ClientTest.class }) public class LongRunningTestSuite {}