Java JUnit 5如何从嵌套测试类中获取父测试实例
我正在实施一项计划。假设我们在嵌套测试中,并且希望为父测试类创建模拟Java JUnit 5如何从嵌套测试类中获取父测试实例,java,mockito,junit5,Java,Mockito,Junit5,我正在实施一项计划。假设我们在嵌套测试中,并且希望为父测试类创建模拟 class RootTest{ @Mock Foo mock; @Nested class NestedTest{ @Test public void foo(){ mock.bar(); } } } 为此,我们需要RootTest的实例,以便将Mock分配给用@Mock注释的字段。 当前的问题是获取RootTest类的实例。第一次尝试是通过ExtensionConte
class RootTest{
@Mock Foo mock;
@Nested
class NestedTest{
@Test
public void foo(){
mock.bar();
}
}
}
为此,我们需要RootTest
的实例,以便将Mock分配给用@Mock
注释的字段。
当前的问题是获取RootTest
类的实例。第一次尝试是通过ExtensionContext.getParent()
和ExtensionContext.getTestInstance()
获取它,但是父级的测试实例是null
问:如何获取嵌套类的父实例?反射可能有帮助,但不是一个选项,因为它依赖于编译器。外部测试实例无法通过
ExtensionContext
访问。但是,如果让扩展实现TestInstancePostProcessor
,则将为外部和内部测试实例调用它。实际上,它是用来设置实例变量的(请参见我们的示例)。它可以工作!代码现在更复杂了,因为我仍然需要在每次回调之前实现beforeachcallback
,以处理额外的注释来定义mockito严格性。在将来的版本中,getTestInstance()
是否有可能返回父级ExtensionContext
的测试实例?ExtensionContext
的父级表示示例中的嵌套测试类,并且只有在使用Lifecycle.PER\u class
时才会设置测试实例。但是,在这种情况下,它将包含嵌套类的一个实例,这不是您所需要的。我们可以向ExtensionContext
添加另一个方法,以获取所有封闭实例,或给定类文本的封闭实例。你能为它创建一个GitHub问题,这样我们就可以继续讨论了吗?