首页 > 解决方案 > JUnit 5:BeforeEachCallback 和 BeforeTestExecutionCallback 之间的区别

问题描述

我找不到任何资源来解释JUnit Jupiter 扩展模型BeforeEachCallbackBeforeTestExecutionCallbackJUnit Jupiter 扩展模型之间的确切区别。(我当然也对“After”变体感兴趣)

据我了解,以下时间表描述了正在发生的事情:

BeforeEach- BeforeTestExecution- Actual execution of the test- AfterTestExecution-AfterEach

我想这是BeforeTestExecution存在的,因此您可以在处理完所有BeforeEach回调之后但在实际测试执行之前执行代码。然而这对我来说仍然不清楚,因为每个人都可以使用BeforeTestExecution代替,BeforeEach并且这些回调的执行顺序又是随机的。

那么,BeforeTestExecution如果您同时在多个扩展中使用此回调,究竟是为了什么以及会发生什么?

标签: javajunitjunit5junit5-extension-model

解决方案


Javadocs(此处此处)没有明确区分它们,但JUnit5 文档包括以下内容:

BeforeTestExecutionCallbackAfterTestExecutionCallback为希望添加行为的扩展定义 API,这些行为将分别在执行测试方法之前和之后立即执行。因此,这些回调非常适合计时、跟踪和类似用例。如果您需要实现围绕@BeforeEach@AfterEach方法调用的回调,请实现BeforeEachCallbackandAfterEachCallback代替。

因此,如果您只想在没有任何设置的情况下包装测试执行,请使用BeforeTestExecutionCallback. 文档继续建议计时和记录测试执行作为BeforeTestExecutionCallback.


推荐阅读