这个确实是一个已知问题:
可以参考这里 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 被推荐使用:这样做有几个好处:
- 可以避免循环依赖,因为构造函数里的赋值,是有顺序的,是作者定义好的(@Autowired没有顺序)
- 字段都是不可变的(一般都是private final)
可以参考这里:https://reflectoring.io/constructor-injection/
注意:混合注入,是可以work的,只是单元测试框架mockit有问题。
转载请注明:牛哥678 » 在有构造函数`@Inject`的情况下,又有其他字段`@Autowired`,如果此时使用`Mockito`框架进行单元测试,`@Autowired`不能 mock成功,单测中一直是`null`