我正在编写一个小扩展,它在我的日志中告诉我测试何时开始,所以我知道哪些日志与哪些测试相关:
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
方法的方法。