首页 文章

如何使用TestInstanceFactory管理实例的生命周期?

提问于
浏览
0

我正在使用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 回答

  • 1

    但是ExtensionContext.getTestInstanceLifecycle被声明为Optional,所以我可能无法分辨哪个Lifecycle是活动的 .

    JUnit 5 Issue Tracker中所述,您可以可靠地检测哪个 Lifecycle 模式处于活动状态 .

    有没有办法让JUnit告诉我何时销毁实例?

    您之前基于当前 Lifecycle 实施 AfterEachCallbackAfterAllCallback 的提案应该足够了 .

    但请记住,如果要在当前上下文关闭后清理某些内容,则始终可以在 ExtensionContext.Store 中存储 CloseableResource . 如果您的扩展当前正在方法级别执行,您还可以选择将此类对象存储在父 Store 中 .

    有什么方法可以判断为禁用的测试创建了哪些实例?

    不,我不认为这是可能的 . TestInstanceFactory 从不知道有关要执行的方法的任何信息,因为在类级别调用 TestInstanceFactory .

相关问题