@injectMocks和mockito中的@Autowired用法之间的区别?

时间:2014-09-17 14:24:16

标签: java spring dependency-injection mockito spring-ioc

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

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

2 个答案:

答案 0 :(得分:10)

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

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

但我建议看一下Constructor injection over Field injection的好处。在这种情况下,您根本不需要使用@InjectMocks,因为您可以通过构造函数将模拟传递给测试对象。在您的测试和生产中都不需要反思。

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

答案 1 :(得分:8)

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

@Autowired是Spring的一个注释,用于将bean自动装配到生产的非测试类中。

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