JUnit 5:BeforeEachCallback 和 BeforeTestExecutionCallback 之间的区别

Flo*_*ger 6 java junit junit5 junit5-extension-model

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

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

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

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

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

gly*_*ing 5

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

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

所以,如果你想包装只是测试执行,没有任何设置的再使用BeforeTestExecutionCallback。文档继续建议计时和记录测试执行作为BeforeTestExecutionCallback.

  • 也有帮助:https://junit.org/junit5/docs/current/user-guide/#extensions-execution-order 中的图片。 (5认同)