【问题标题】:Can JUnit 5 actually inject extension instances?JUnit 5 真的可以注入扩展实例吗?
【发布时间】:2021-08-17 23:57:21
【问题描述】:

@RegisterExtension 的文档提到了有关注入实例的内容:

扩展将在测试类被实例化后注册,毕竟 TestInstancePostProcessors 有机会对测试实例进行后处理 (可能将要使用的扩展实例注入到带注释的字段中)。

JUnit 中是否有任何后处理器可以自动为扩展执行此操作,或者这只是在谈论人们将来可能构建的东西?

在我们的例子中,我发现我们的许多扩展都是这样的:

    @RegisterExtension
    public final TempFolderExtension temp = new TempFolderExtension();

    @RegisterExtension
    public final SomeFactoryExtension factory = new SomeFactoryExtension(temp);

像 PicoContainer 这样的容器可以自动找出如何构造实例。

如果我们能写,那就太好了,

    @RegisterExtension
    public TempFolderExtension temp;

    @RegisterExtension
    public SomeFactoryExtension factory;

注释处理器或运行时注入器都可以填充其余部分。

这种扩展之间的依赖关系也会影响它们应该运行的顺序。

【问题讨论】:

    标签: java junit5 junit5-extension-model


    【解决方案1】:

    简短回答:不,不可能,当使用@RegisterExtension 时,您必须手动构建扩展实例。

    阅读https://junit.org/junit5/docs/current/user-guide/#extensions5.2.2

    【讨论】:

    • 5.2.2 实际上是包含我在问题第一段中包含的引文的部分,因此人们可能会认为我已经阅读了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2015-11-12
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多