我正在使用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
创建的实例。启动Weld有点昂贵,因此理想情况下,无论如何我都会跳过针对禁用测试的工作。有什么方法可以告诉我正在为禁用测试创建哪些实例?
答案 0 :(得分:1)
但是
ExtensionContext.getTestInstanceLifecycle
被声明为Optional
,因此我可能无法确定哪个Lifecycle
是活动的。
如JUnit 5 Issue Tracker中所述,您可以可靠地检测到哪个Lifecycle
模式处于活动状态。
有没有办法让JUnit告诉我何时销毁实例?
您先前基于当前AfterEachCallback
实现AfterAllCallback
或Lifecycle
的提案就足够了。
但是请记住,如果要在 current 上下文关闭后清除某些内容,可以始终将CloseableResource
存储在ExtensionContext.Store
中。如果您的扩展程序当前正在方法级别执行,您还可以选择将此类对象存储在 parent Store
中。
我是否可以通过某种方式确定正在为禁用测试创建哪些实例?
不,我认为不可能。 TestInstanceFactory
永远不知道将要执行的方法,因为在类级别调用了TestInstanceFactory
。