junit - 使用 Maven 从 @Category 运行所有测试

标签 junit maven categories surefire

我只想运行我的单元测试的一个子集,那些由特定的 @Category 定义的。 .

所以我读了几个SO问题,例如this one (这正是我正在寻找的),还有 this one .

我的问题的解决方案似乎由 ClasspathSuite project 提供.于是我开始写NewTestOldTest将定义我的测试类别的接口(interface)。然后,我创建了 AllTests套房:

@RunWith(ClasspathSuite.class)
public class AllTests { }

之后,我创建了一个 AllNewTests套房:
@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...
}

现在,如果我运行 全部测试 , 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] ------------------------------------------------------------------------

抛出的异常如下:
org.junit.runner.manipulation.NoTestsRemainException
    at org.junit.runners.ParentRunner.filter(ParentRunner.java:256)
    at org.junit.experimental.categories.Categories.<init>(Categories.java:142)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:35)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:33)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:146)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103)
    at $Proxy0.invoke(Unknown Source)
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:145)
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:70)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)

我的问题是我做错了什么?

技术细节:Java 6、Maven 3.0.2、JUnit 4.8.1、Surefire 插件 2.7.1、cpsuite-1.2.5

最佳答案

作为更新:从 Surefire 插件 v2.11 开始,现在支持 JUnit 4.8+ 样式类别。

release notes for Surefire v2.11提到新功能。可以使用 groups 配置 surefire:test 目标。 .

关于junit - 使用 Maven 从 @Category 运行所有测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970196/

相关文章:

java - 如何获得关于在 junit 测试中有多少 assertEquals 语句通过/失败的报告

java - 以编程方式启动 Appium 服务失败

mysql - 对 Wordpress 数据库的查询返回帖子的无效类别

magento - GridView 中每行的产品 magento go

java - 从 IDE 中在远程服务器上运行 TestNG/JUnit 集成测试

java - Mockito NumberFormat 在 when() 方法中模拟 NullPointer

spring-boot - Gradle构建失败,因为使用RestTemplate的测试

java - fork JUNIT 执行

java - Liquibase Maven 无法读取 changeLogFile

magento - 显示父级别的事件和非事件类别 magento