Junit 使用Maven从@Category运行所有测试
我只想运行我的单元测试的一个子集,这些测试是由特定的Junit 使用Maven从@Category运行所有测试,junit,maven,categories,surefire,Junit,Maven,Categories,Surefire,我只想运行我的单元测试的一个子集,这些测试是由特定的@类别定义的 所以我读了几个问题,比如(这正是我要找的),还有 解决我问题的办法似乎是由政府提供的。所以我开始编写NewTest和OldTest接口来定义我的测试类别。然后,我创建了AllTests套件: @RunWith(ClasspathSuite.class) public class AllTests { } @RunWith(Categories.class) @IncludeCategory(NewTest.class) @Sui
@类别定义的
所以我读了几个问题,比如(这正是我要找的),还有
解决我问题的办法似乎是由政府提供的。所以我开始编写NewTest
和OldTest
接口来定义我的测试类别。然后,我创建了AllTests
套件:
@RunWith(ClasspathSuite.class)
public class AllTests { }
@RunWith(Categories.class)
@IncludeCategory(NewTest.class)
@SuiteClasses( { AllTests.class })
public class AllNewTests { }
之后,我创建了一个AllNewTests
套件:
@RunWith(ClasspathSuite.class)
public class AllTests { }
@RunWith(Categories.class)
@IncludeCategory(NewTest.class)
@SuiteClasses( { AllTests.class })
public class AllNewTests { }
最后,我创建了两个JUnit类,每个类别一个:
@Category(NewTest.class)
public class SomeNewTests {
// some tests...
}
@Category(OldTest.class)
public class SomeOldTests {
// some tests...
}
现在,如果我运行AllTests,Eclipse将启动我项目的所有测试,而Maven由于没有找到测试而失败:
mvn test -Dtest=AllTests
...
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running my.company.AllTests
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.093 sec
There are no tests to run.
如果我运行AllNewTests(这是正确的操作,对吗?),在Eclipse中一切都很好(即它只运行用@Category(NewTest.class)
注释的测试),但是Maven返回一个错误:
mvn test -Dtest=AllNewTests
...
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running my.company.AllNewTests
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.125 sec <<< FAILURE!
Results :
Tests in error:
initializationError(my.company.AllNewTests)
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
mvn测试-Dtest=AllNewTests
...
-------------------------------------------------------
T T S T S
-------------------------------------------------------
管理我的公司所有新测试
测试运行:1,失败:0,错误:1,跳过:0,运行时间:0.125秒我通过创建自己的JUnit Runner
,扩展了套件,解决了我的问题
这个想法与Classpath套件项目的原理很接近,即查找Classpath中存在的类,并只保留使用给定注释注释的类(例如,@NewTest
)
如果您感兴趣,可以阅读。作为更新:从Surefire插件v2.11开始,现在支持JUnit 4.8+样式类别
网站提到了新功能。surefire:test目标可以使用进行配置。在阅读了一些博客文章和stackoverflow问题后,我终于能够使用surefire插件实现这一点,正如用户1034382所回答的那样。在我的例子中,是maven surefire插件的2.17版
再加上我的两分钱,更多最新的解释可以在这里找到:
但您可能会遇到以下surefire插件问题:
[ERROR] java.lang.RuntimeException: Unable to load category:
可通过其他stackoverflow问题/答案解决的问题:
我的答案是在这里收集所有这些信息,避免谷歌搜索/阅读许多不同的解决方案。至少,这对我起了作用。你真的成功了吗?很抱歉,我似乎无法让它工作。Surefire(2.11/2.12)似乎忽视了群体。它只是运行所有测试。@JanGoyvaerts这是一个bug,现在已经修复了。事实上,要运行2.11和2.12中的类别,必须指定对junit47提供程序(surefire-junit47)的依赖关系。这在2.13-SNAPSHOT中得到了修复,应该可以在没有显式依赖的情况下工作。正如您所说,我最终使它工作了。但是提供商有一个很大的性能问题。当测试持续时间过长时,它会缓冲日志(这还不错),并消耗所有内存和cpu。因此,我切换到命名约定-因为它本来就是这样。这是没有问题的。我已经指出了这个问题。这个方法现在已经完全过时了,在surefire插件中进行了改进(参见user1034382答案)。