我正在编写一个扩展名,它可以在测试开始时在日志中告诉我,因此我知道哪些日志与哪些测试有关:
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
,但是空了。
答案 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。