在尝试了答案中的解决方案和注释中链接的问题之后,我最终使用了JUnit Platform Launcher解决方案。
class DisallowUppercaseLetterAtBeginningTest { @Test void should_succeed_if_method_name_starts_with_lower_case() { TestExecutionSummary summary = runTestMethod(MyTest.class, "validTest"); assertThat(summary.getTestsSucceededCount()).isEqualTo(1); } @Test void should_fail_if_method_name_starts_with_upper_case() { TestExecutionSummary summary = runTestMethod(MyTest.class, "InvalidTest"); assertThat(summary.getTestsFailedCount()).isEqualTo(1); assertThat(summary.getFailures().get(0).getException()) .isInstanceOf(RuntimeException.class) .hasMessage("test method names should start with lowercase."); } private TestExecutionSummary runTestMethod(Class<?> testClass, String methodName) { SummaryGeneratingListener listener = new SummaryGeneratingListener(); LauncherDiscoveryRequest request = request().selectors(selectMethod(testClass, methodName)).build(); LauncherFactory.create().execute(request, listener); return listener.getSummary(); } @ExtendWith(DisallowUppercaseLetterAtBeginning.class) static class MyTest { @Test void validTest() { } @Test void InvalidTest() { fail("test should have failed before"); } }}JUnit本身不会运行,
MyTest因为它是不带的内部类
@Nested。因此,在构建过程中不会有失败的测试。
更新资料
JUnit本身不会运行,
MyTest因为它是不带的内部类@Nested。因此,在构建过程中不会有失败的测试。
这不是完全正确的。JUnit本身也将运行
MyTest,例如,如果在IDE或Gradle构建中启动了“运行所有测试”。
MyTest未执行的原因是因为我使用了Maven并使用进行了测试
mvn test。Maven使用Maven
Surefire插件执行测试。该插件具有默认配置,该配置 排除 所有嵌套类,例如
MyTest。



