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

Sai*_*rra 8 java spring dependency-injection mockito spring-ioc

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

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

lub*_*nac 11

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

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

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

如果你想用Spring bean的子集创建集成测试,我建议你看一下@DirtiesContext注释.它是Spring框架模块的一部分,通常称为"Spring Test".


Mar*_*ers 8

@InjectMocks是一个机构的Mockito用于注射在声明的字段测试类成匹配在类字段被测.它不要求被测试的类是Spring组件.

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

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