Junit5:如何反省测试是否实际上通过@Before/AfterEach方法进行了增强



我正在编写一个小扩展,它在我的日志中告诉我测试何时开始,所以我知道哪些日志与哪些测试相关:

public class LoggingExtension implements Extension, BeforeEachCallback, AfterTestExecutionCallback {
  protected final Logger log = LoggerFactory.getLogger(getClass());
  @Override
  public void beforeEach(final ExtensionContext context) throws Exception {
    log.info("-- Test @before: {}::{} ----------------------------------------",
             context.getDisplayName(),
             context.getTestClass().map(x -> x.getSimpleName()).orElse("no test class available"));
  }
  /**
   * (non-Javadoc) ${see_to_overridden}
   */
  @Override
  public void afterTestExecution(final ExtensionContext context) throws Exception {
    context.getExecutionException()
           .ifPresent(ex -> {
             log.error("-- Test @after: {}::{} ----------------------------------------",
                       context.getDisplayName(),
                       context.getTestClass().map(x -> x.getSimpleName()).orElse("no test class available"),
                       ex);
             //             log.error("", ex);
           });
  }
}

我想这样改变它:

  • 测试本身开始时记录-- Test @start: ...(即使用BeforeTestExecutionCallback
  • 并使用BeforeEachCallback来标记@BeforeEach执行的开始,但仅在实际执行代码之前,以避免混乱。

所以问题是:我如何判断是否真的有 1..n 个正在执行的 @BeforeEach 方法?

我调查了ExtensionContext,但结果是空的。

所以问题是:我如何判断是否真的有 1..n 个正在执行的@BeforeEach方法?

从JUnit Jupiter 5.4开始,没有官方的方法可以找出答案。该信息不会在任何面向用户的API中公开:它是JUnit Jupiter TestEngine的内部信息。

但是,JUnit Jupiter 5.5 中推出的新InvocationInterceptor扩展 API 将提供一种确定是否即将执行@BeforeEach方法的方法。

最新更新