首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在mockito中@injectMocks和@Autowired用法有什么不同?

在mockito中@injectMocks和@Autowired用法有什么不同?
EN

Stack Overflow用户
提问于 2014-09-17 22:24:16
回答 2查看 14.3K关注 0票数 12

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-17 22:27:06

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

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

如果你想在被测类中使用@Autowired注解,另一种方法是使用springockito,它允许你声明模拟bean,这样它们将被自动连接到被测类中,就像Spring自动装配bean一样。但通常情况下,这是不必要的。

票数 11
EN

Stack Overflow用户

发布于 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“。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25893247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档