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. 开始焊接有点贵,所以理想情况下,无论如何我都会跳过为禁用测试做这项工作。有什么方法可以告诉我正在为禁用测试创建哪些实例?

4

1 回答 1

1

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

正如JUnit 5 问题跟踪器中所讨论的,您可以可靠地检测哪种Lifecycle模式处于活动状态。

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

您之前的建议实施AfterEachCallbackAfterAllCallback基于当前Lifecycle应该就足够了。

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

有什么方法可以告诉我正在为禁用测试创建哪些实例?

不,我不认为这是可能的。ATestInstanceFactory永远不知道要执行的方法,因为 aTestInstanceFactory是在类级别调用的。

于 2018-09-01T13:36:18.997 回答