【问题标题】:Does @InjectMock replace the bean with a mock in all other beans?@InjectMock 是否用所有其他 bean 中的模拟替换 bean?
【发布时间】:2026-02-08 18:00:01
【问题描述】:

如果我注释

@InjectMock
MyClass myclass;

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

换句话说,如果我有

@ApplicationScope
class MyClass {

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

【问题讨论】:

    标签: java dependency-injection mockito inversion-of-control


    【解决方案1】:

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

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

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

    @InjectMocks
    MyClass myclass;
    

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

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

    使用@InjectMocks 会有意义:

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

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

    MyClass 的实例的创建和模拟的注入分别发生在每个 @Test 上。

    【讨论】:

      最近更新 更多