首页 > 解决方案 > @InjectMock 是否用所有其他 bean 中的模拟替换 bean?

问题描述

如果我注释

@InjectMock
MyClass myclass;

在测试中,这是否意味着在所有情况下其他 bean 都使用 的依赖项MyClass进行初始化,它们将使用这个模拟实例进行初始化?

换句话说,如果我有

@ApplicationScope
class MyClass {

在某个地方,它会被忽略吗?

标签: javadependency-injectionmockitoinversion-of-control

解决方案


我猜你有一个错字,应该有@InjectMocks。对于您的问题:

这是否意味着,在所有情况下,其他 bean 都使用 MyClass 的依赖项进行初始化,它们将使用这个模拟实例进行初始化?

据我了解,答案是否定的。这个

@InjectMocks
MyClass myclass;

不会创建一个模拟,MyClass也不会使其以任何方式全局可访问(或在任何地方注入),但是当有任何可用时,它会将其他模拟注入MyClass. 例如,如果您MyClass是这样的:

@Component
public MyClass {
    @Resource
    private SomeResource someResource;
}

using@InjectMocks像这样使用时会有意义:

@Mock
private SomeResource someResource;
@InjectMocks
private MyClass myClass;

someResource那么对in 的任何调用myClass实际上都将针对@Mock您可能希望根据需要存根的那个。

这种实例的创建MyClass和模拟的注入发生在每个@Test人身上。


推荐阅读