JUnitCore.run()忽略@BeforeAll注释

时间:2017-11-12 15:11:51

标签: java junit junit5

我正在使用JUnit 5库在Eclipse Oxygen.1a(4.7.1a)中工作,当我使用JUnitCore运行测试类时,似乎没有一个带注释的方法正常运行。

例如,如果我使用JUnitCore.run(TestClass.class)调用以下类:

public class TestClass {

    @BeforeAll
    public static void beforeAll() {
        System.out.println("In TestClass.beforeAll");
    }

    @Test
    public void testMethod() {
        System.out.println("In TestClass.testMethod");
    }

    @AfterAll
    public static void afterAll() {
        System.out.println("In TestClass.afterAll");
    }

}

System.out没有输出,Result对象表示1次测试失败。暗示这些方法都没有运行。我可以使用JUnit Launcher来运行测试类,如下所示:

final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
        .selectors(selectClass(TestClass.class)).build();
final Launcher launcher = LauncherFactory.create();
launcher.execute(request);

然而,这并没有给我任何关于通过/失败的测试数量的反馈,它似乎只是运行它们。我找不到关于在JUnit5中使用JUnitCore的大量文档,我应该使用哪些更新的东西?

1 个答案:

答案 0 :(得分:3)

您不应该将JUnitCore与JUnit 5一起使用,而是像在分析的第二部分中那样使用平台启动器API。

launcher#execute(.)不返回任何值,因此根据JUnit 5文档7.1.2 Executing Tests,您需要使用侦听器来聚合测试执行的结果。

  

execute()方法没有返回值,但您可以轻松地使用侦听器将最终结果聚合在您自己的对象中。有关示例,请参阅SummaryGeneratingListener。

例如,您可以生成TestExecutionSummary,这可能确实为您提供了您想要收集的信息:

final LauncherDiscoveryRequest request = 
    LauncherDiscoveryRequestBuilder.request()
                                   .selectors(selectClass(TestClass.class))
                                   .build();

final Launcher launcher = LauncherFactory.create();
final SummaryGeneratingListener listener = new SummaryGeneratingListener();

launcher.registerTestExecutionListeners(listener);
launcher.execute(request);

TestExecutionSummary summary = listener.getSummary();
long testFoundCount = summary.getTestsFoundCount();
List<Failure> failures = summary.getFailures();
...