首页 > 解决方案 > 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);
           });
  }

}

我想这样改变:

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

我调查了ExtensionContext但空无一物。

标签: junit5-extension-model

解决方案


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

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

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


推荐阅读