1

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

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但空无一物。

4

1 回答 1

1

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

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

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

于 2019-06-05T10:55:41.777 回答