@InjectMocks
private Foo foo;
@Mock
private Var var;
@InjectMocks
private MyClass myClass
foo具有var。myclass有foo。我是@InjectMocks
在FOO中的注射var,并且喜欢向myclass注入foo,但myclass中的foo是无效的。
我想这是因为foo未经@Mock
注释。有什么办法可以将foo注入myllass,同时向foo注入var?
假设您的类依赖性是这样的:
MyClass ---dependsOn--> Foo --dependsOn--> Var
如果您正在为MyClass
编写单元测试,则只需要模拟Foo
并注入MyClass
即可。因为在这种情况下嘲笑Foo
本身,因此您不必担心其依赖关系。
@Mock private Foo foo;
@InjectMock private MyClass myClass;
要为Foo
编写单元测试,我建议您在单独的文件中创建一个单独的单元测试类。在那里您可以模拟Var
并注入Foo
。
@Mock private Var var;
@InjectMock private Foo foo;
得出结论,应为每一层的依赖项编写单位测试。您不应在一个测试文件中混合两层的单元测试。要单元测试一个类,您只需要模拟其 Direct 依赖项即可。因此,在测试MyClass
时,您只需模拟Var
并根据您的要求模拟其行为:
Mockito.when(var.someMethod()).thenReturn(someValue);