我正在使用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);
但是,这并没有给我有关多少测试通过/失败的任何反馈,似乎只是在运行它们。我找不到太多有关将JUnitCore与JUnit5一起使用的文档,我应该使用较新的东西吗?
最佳答案
您不应将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();
...