spring – Mockito注入不适用于构造函数和setter模拟在一起
发布时间:2020-12-15 01:24:54 所属栏目:大数据 来源:网络整理
导读:我有一个类通过构造函数注入成员,其他通过setter注入.我似乎无法让Mockito注入二传手.注入的构造函数被模拟得很好,但是setter的返回为null.当我将setter-ed成员翻转到构造函数注入时,一切都很顺利.这是原始的生产代码: @Autowiredprivate BetRepository bet
我有一个类通过构造函数注入成员,其他通过setter注入.我似乎无法让Mockito注入二传手.注入的构造函数被模拟得很好,但是setter的返回为null.当我将setter-ed成员翻转到构造函数注入时,一切都很顺利.这是原始的生产代码:
测试代码:
有任何想法吗? 谢谢! 最佳答案
是的,@ InjectMocks注释使得Mockito EITHER进行构造函数注入,或者setter / field注入,但是从不这两个.选择的规则非常复杂,这也是我尽量避免使用@InjectMocks的原因之一.
总而言之,Mockito FIRST从类中的那些中选择一个构造函数,然后分析该构造函数是否可用于构造函数注入.它选择的那个将永远是具有最多参数的那个.如果有多个构造函数具有相同数量的参数,则未定义哪个将被选择. 如果CHOSEN构造函数的一个或多个参数的类型是基本类型,或最终类或私有类,则不会使用构造函数注入.即使有其他构造函数可以使用. 如果未使用构造函数注入,或者唯一的构造函数是默认构造函数,则将使用setter / field injection.但是setter / field注入永远不会与构造函数注入一起使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |