Java 如何在JUnit5中注册TestExecutionListener并检测是否执行了所有测试

Java 如何在JUnit5中注册TestExecutionListener并检测是否执行了所有测试,java,junit,java-8,junit5,Java,Junit,Java 8,Junit5,您好,我正在尝试使用JUnit5作为框架来实现集成测试,我们只想在执行所有测试之前启动所有流程一次,在执行所有测试时停止所有流程 我发现没有简单的方法可以做到这一点,因为我们有很多测试类,每个测试类的前后方法都有效 我发现,如果我可以注册自己的自定义侦听器,我可能可以做到这一点,但不知怎么的,它不起作用 import com.google.auto.service.AutoService; import org.junit.platform.launcher.TestExecut

您好,我正在尝试使用JUnit5作为框架来实现集成测试,我们只想在执行所有测试之前启动所有流程一次,在执行所有测试时停止所有流程

我发现没有简单的方法可以做到这一点,因为我们有很多测试类,每个测试类的前后方法都有效

我发现,如果我可以注册自己的自定义侦听器,我可能可以做到这一点,但不知怎么的,它不起作用

import com.google.auto.service.AutoService;
        import org.junit.platform.launcher.TestExecutionListener;
        import org.junit.platform.launcher.TestPlan;

@AutoService(TestExecutionListener.class)
public class StateExecutionListener implements TestExecutionListener {

    public void testPlanExecutionStarted(TestPlan testPlan) {
        System.out.println("##########testPlanExecutionStarted "+testPlan.getRoots());
    }

    public void testPlanExecutionFinished(TestPlan testPlan) {
        System.out.println("##########testPlanExecutionStarted "+testPlan.getRoots());
    }

}
您知道我们如何注册自己的监听器/以任何其他方式检测是否执行了所有测试用例吗?
我使用gradle JunitPlatform运行我的测试

要让您的
TestExecutionListener
自动注册,您必须通过Java的
ServiceLoader
机制进行注册,如JUnit 5用户指南中所述:


要补充Sam的答案:

  • 假设您有一个实现
    TestExecutionListener
    的类
    MyExecutionListener
    ,创建一个文件
    src/main/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener
  • 在文件中放置
    MyExecutionListener
    的引用(即
    com.blah.x.y.z.MyExecutionListener
  • 官方JUnit 5存储库中提供了一个示例: