@InjectMocks和@Autowired在 mockito 中的用法有什么区别?

当我使用 Mockito 和 Junit 编写测试用例时,我正在使用 用于测试的类。在项目的其他部分,我也看到正在用于测试的类。@InjectMocks@Autowired

我什么时候可以使用 和 ?当我们尝试将它们与要测试的类一起使用时,两者之间的区别是什么?@InjectMocks@Autowired


答案 1

@InjectMocks是一种 Mockito 机制,用于将测试类中的声明字段注入到被测试类中的匹配字段中。它不要求被测类是Spring组件。

@Autowired是Spring的注释,用于将Bean自动连接到生产的非测试类中。

如果你想利用被测类中的注释,另一种方法是使用springockito,它允许你声明模拟bean,以便它们将自动连接到被测类中,就像Spring自动连接bean一样。但通常这不是必需的。@Autowired


答案 2

@InjectMocks注释告诉 Mockito 将所有模拟(由注释注释的对象)注入到测试对象的字段中。Mockito为此使用了Reflectle。@Mock

@Autowired注释告诉Spring框架从其IoC容器中注入bean。Spring在私人现场注入时也使用反射。您甚至可以使用具有相同效果的甚至使用注释(Java EE规范的一部分)。@Inject

但我建议看看构造函数注入相对于现场注入的好处。在这种情况下,您根本不需要使用,因为您可以通过构造函数将模拟传递到测试对象中。在测试或生产中,引擎盖下都不需要反射。@InjectMocks

如果你想用Spring beans的子集创建集成测试,我建议看看注释。它是弹簧框架模块的一部分,通常称为“弹簧测试”。@DirtiesContext


推荐