最新消息:

在有构造函数`@Inject`的情况下,又有其他字段`@Autowired`,如果此时使用`Mockito`框架进行单元测试,`@Autowired`不能 mock成功,单测中一直是`null`

Amazon niuge678 998浏览 0评论

这个确实是一个已知问题:
可以参考这里 https://blog.csdn.net/wenpeng12/article/details/120330391

@InjectMocks会使用字段注入,或者构造器注入。但是不会同时选择两种注入。

其实用了构造函数,就不要用@Autowired的了。
现在Spring官方其实倾向于用构造函数注入的方式(官方文档写的:Constructor injection is highly recommended),

注入有3中方式:
constructor-based injection,
setter-based injection,
field-based injection.

constructor-based 被推荐使用:这样做有几个好处:

  1. 可以避免循环依赖,因为构造函数里的赋值,是有顺序的,是作者定义好的(@Autowired没有顺序)
  2. 字段都是不可变的(一般都是private final)
    可以参考这里:https://reflectoring.io/constructor-injection/

注意:混合注入,是可以work的,只是单元测试框架mockit有问题。

转载请注明:牛哥678 » 在有构造函数`@Inject`的情况下,又有其他字段`@Autowired`,如果此时使用`Mockito`框架进行单元测试,`@Autowired`不能 mock成功,单测中一直是`null`

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址