junit5-extension-model - 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);
});
}
}
我想这样改变:
- 记录
-- 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
方法是否即将被执行。
推荐阅读
- spacy - spaCy 仅在调用“rasa train”时无法加载模型
- discord-jda - 如何使用 JDA 在 Discord 服务器(不是用户/机器人 DM)中创建私人频道:Java Discord API
- firebase - 如何以非实时方式将数据保存为firebase中的日志,以便更新和读取这些数据的成本不那么高?
- c - 复制指针和内存分配混乱
- javascript - 如何使用两个数组将复选框的值设置为 true?
- javascript - Windows 版 Safari 浏览器是否支持 ECMAScript 2016(ECMAScript 7)?
- apache-flink - 按时间属性窗口并推送到流
- java - Java Sprint-Boot:无法访问@Configuration 中定义的@Bean
- git - 如何在 SmartGit 中克隆一个简单的 HTTPS 存储库?
- python - Python POST 字符串数据