我正在使用JUnit 5.3.0-RC1,试图为新的 TestInstanceFactory
接口实现扩展 . (我想从Weld获取CDI注入物等)
如果我实现 TestInstanceFactory
,我可以创建自己的实例 . 如果我也实施了 AfterEachCallback
,我可以在每次测试后清理它们(关闭Weld) . 到现在为止还挺好 .
但是:为此,我必须假设 TestInstance.LifeCycle.PER_METHOD
. 如果测试类使用 TestInstance.Lifecycle.PER_CLASS
,我必须检测到这一点并等到 AfterAllCallback
然后销毁Weld . 但 ExtensionContext.getTestInstanceLifecycle
被声明为 Optional
,因此我可能无法分辨哪个生命周期处于活动状态 .
有没有办法让JUnit告诉我何时销毁实例?有一个像 TestInstanceDestructor
这样的扩展会很好,只要JUnit完成了测试实例的使用就会调用它 .
其次, AfterEachCallback
永远不会被调用 @Disabled
测试,这意味着我无法清理通过 TestInstanceFactory
创建的实例 . 开始焊接是一种昂贵的,所以理想情况下,我会跳过那些残疾测试的工作 . 有什么方法可以告诉我们为残疾测试创建了哪些实例?
1 回答
如JUnit 5 Issue Tracker中所述,您可以可靠地检测哪个
Lifecycle
模式处于活动状态 .您之前基于当前
Lifecycle
实施AfterEachCallback
或AfterAllCallback
的提案应该足够了 .但请记住,如果要在当前上下文关闭后清理某些内容,则始终可以在
ExtensionContext.Store
中存储CloseableResource
. 如果您的扩展当前正在方法级别执行,您还可以选择将此类对象存储在父Store
中 .不,我不认为这是可能的 .
TestInstanceFactory
从不知道有关要执行的方法的任何信息,因为在类级别调用TestInstanceFactory
.