首页  >  文章  >  Java  >  Mockito 的 @Mock 和 @InjectMocks 注解有什么区别?

Mockito 的 @Mock 和 @InjectMocks 注解有什么区别?

Patricia Arquette
Patricia Arquette原创
2024-11-25 02:20:18488浏览

What's the Difference Between Mockito's @Mock and @InjectMocks Annotations?

理解 Mockito 中 @Mock 和 @InjectMocks 的区别

Mockito 是一个流行的 Java 模拟框架,它提供了两个重要的注解:@模拟和@InjectMocks。虽然两者对于模拟测试都是必不可少的,但它们具有不同的目的。

@Mock:创建 Mock

@Mock 用于创建模拟对象。它代表真实对象的伪造或模拟实现。模拟允许您控制它们的行为并在测试中断言它们的交互。例如:

@Mock
private SomeDependency someDependency;

此代码创建 SomeDependency 接口的模拟。然后你可以在测试中使用这个mock。

@InjectMocks:注入Mocks

相比之下,@InjectMocks扮演着不同的角色。它用于创建类的实例,并将使用@Mock(或@Spy)注释创建的模拟注入到该实例中。这允许您测试多个类及其依赖项之间的交互,而无需创建真实实例。例如:

@InjectMocks
private SomeManager someManager;

在这种情况下,someManager 是 SomeManager 类的实例。 @InjectMocks 注解告诉 Mockito 将 someDependency 模拟注入到 someManager 实例中。

初始化和使用说明

要使用 @InjectMocks,您必须使用 @ 初始化模拟RunWith(MockitoJUnitRunner.class) 或 Mockito.initMocks(this) 对于 JUnit 4 和JUnit 5 的 @ExtendWith(MockitoExtension.class)。此外,请记住 @InjectMocks 只能在测试类中使用一次,并且应将其放置在代表被测类的字段上。

用法示例

以下示例说明了如何使用 @Mock 和@InjectMocks:

@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {

    @InjectMocks
    private SomeManager someManager;

    @Mock
    private SomeDependency someDependency; // this will be injected into someManager
 
    // tests...
}

在这个测试中,someDependency 模拟将自动注入到 someManager 实例中,允许您有效地测试它们的交互。

以上是Mockito 的 @Mock 和 @InjectMocks 注解有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn