说明
在 Mockito 中,@Mock
和 @InjectMocks
是用于处理模拟对象的注解,但它们有不同的作用和用途:
-
@Mock
注解:@Mock
注解用于创建一个模拟对象。模拟对象是用来模拟一个类或接口的实例,以便在测试中模拟该对象的行为。- 当您使用
@Mock
注解标记一个字段时,Mockito 会自动为该字段创建一个模拟对象,并将其初始化。 @Mock
主要用于模拟测试目标类(被测试类)中的依赖项或其他与被测试类交互的对象。
@Mock private SomeDependency dependency; // 创建 SomeDependency 类的模拟对象
-
@InjectMocks
注解:@InjectMocks
注解用于注入模拟对象到被测试类(测试目标类)的字段中。- 当您使用
@InjectMocks
注解标记一个字段时,Mockito 会尝试将模拟对象自动注入到该字段中,以便在测试中使用模拟对象来模拟依赖项。 @InjectMocks
主要用于注入模拟对象到被测试类中,以模拟被测试类的依赖项。
@InjectMocks private SomeService service; // 将模拟对象自动注入到 SomeService 类中
总结:
@Mock
用于创建模拟对象。@InjectMocks
用于注入模拟对象到被测试类中,以模拟依赖项。- 通常,您会在测试中同时使用这两个注解,创建模拟对象并将其注入到被测试类中,以便模拟依赖项并进行单元测试。
实战
private UserService userService;
@Mock
private UserDao userDao;
@Before
public void setUp() {
userService = new UserService(userDao);
}
等价于
@InjectMocks
private UserService userService;
@Mock
private UserDao userDao;