当我使用Mockito和Junit编写测试用例时,我使用的是要测试的类的@InjectMocks
。在项目的其他部分,我还看到要测试的类使用了@Autowired
。
什么时候可以使用@InjectMocks
和@Autowired
?当我们尝试将它们与待测试的类一起使用时,两者之间的区别是什么?
发布于 2014-09-17 22:27:06
@InjectMocks
是一种Mockito机制,用于将测试类中声明的字段注入到测试下的类中的匹配字段中。它不要求被测试的类是Spring组件。
@Autowired
是Spring的注解,用于将bean自动装配到生产的非测试类中。
如果你想在被测类中使用@Autowired
注解,另一种方法是使用springockito,它允许你声明模拟bean,这样它们将被自动连接到被测类中,就像Spring自动装配bean一样。但通常情况下,这是不必要的。
发布于 2014-09-17 23:13:04
@InjectMocks
注解告诉Mockito将所有mock(由@Mock
注解标注的对象)注入到测试对象的字段中。Mockito为此使用了反射。
@Autowired
注解告诉Spring框架从其IoC容器注入bean。Spring在私有字段注入时也会使用反射。您甚至可以使用甚至使用@Inject
注释( Java规范的一部分)来达到同样的效果。
但我建议看看Constructor injection over Field injection的好处。在这种情况下,您根本不需要使用@InjectMocks
,因为您可以通过构造函数将模拟传递到测试对象中。无论是在测试中还是在生产中,都不需要在幕后进行反射。
如果你想用Spring的子集创建集成测试,我建议你看看@DirtiesContext
注解。它是Spring框架模块的一部分,通常称为"Spring Test“。
https://stackoverflow.com/questions/25893247
复制相似问题