【问题标题】:JUnit 5 How to get the instance of parent test form a nested test classJUnit 5如何从嵌套测试类中获取父测试的实例
【发布时间】:2018-04-11 09:31:22
【问题描述】:

我正在实施Mockito extension for JUnit 5。假设我们在一个嵌套测试中并且想要为父测试类创建模拟。

class RootTest{
  @Mock Foo mock;

  @Nested
  class NestedTest{
    @Test
    public void foo(){
       mock.bar();
    }
  }
}

为此,我们需要RootTest 的实例,以便将模拟分配给带有@Mock 注释的字段。 当前的问题是获取RootTest类的实例。第一次尝试是通过ExtensionContext.getParent()ExtensionContext.getTestInstance() 获取它,但测试实例是null 用于父级。

Q:如何获取嵌套类的父实例?反射可能会有所帮助,但不是一种选择,因为它依赖于编译器。

【问题讨论】:

    标签: java mockito junit5


    【解决方案1】:

    无法通过ExtensionContext 访问外部测试实例。然而,如果你让你的扩展实现TestInstancePostProcessor,它将被外部和内部测试实例调用。实际上,它是用来设置实例变量的(参见我们的sample Mockito extension 示例)。

    【讨论】:

    • 有效!代码现在更复杂了,因为我仍然需要实现 BeforeEachCallback 来处理额外的注释来定义模拟严格性。 getTestInstance() 是否有可能在未来的版本中返回父 ExtensionContext 的测试实例?
    • ExtensionContext 的父级代表您示例中的嵌套测试类,并且只有在您使用Lifecycle.PER_CLASS 时才会设置测试实例。但是,在这种情况下,它将包含一个嵌套类的实例,这不是您所需要的。我们可以向ExtensionContext 添加另一个方法来获取所有封闭实例,或给定类文字的封闭实例。您能否为其创建一个 GitHub 问题,以便我们继续讨论?
    猜你喜欢
    • 2022-08-20
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2017-08-23
    相关资源
    最近更新 更多