junit5:如何内省@ Before / AfterEach方法是否真正增强了测试

时间:2018-12-29 13:29:29

标签: junit5-extension-model

我正在编写一个扩展名,它可以在测试开始时在日志中告诉我,因此我知道哪些日志与哪些测试有关:

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执行的开始但只有当实际在执行代码之前,以避免混乱。< / li>

所以问题是:我怎么知道实际上是否正在执行1..n个@BeforeEach方法?

我调查了ExtensionContext,但是空了。

1 个答案:

答案 0 :(得分:1)

  

所以问题是:我怎么知道实际上是否正在执行1..n @BeforeEach方法?

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

但是,JUnit Jupiter 5.5中提供的新InvocationInterceptor扩展API将提供a way to determine if a @BeforeEach method is about to be executed