当我使用Mockito和Junit编写测试用例时,我正在使用@InjectMocks
来测试该类。在项目的其他部分,我还看到@Autowired
正被用于要测试的类。
我何时可以使用@InjectMocks
和@Autowired
?当我们尝试将它们与要测试的类一起使用时,两者之间有什么区别?
答案 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一样。但通常没有必要。