问题描述
即使我使用所有匹配器,我也遇到了众所周知的InvalidUSEOfMatchersException。
org.mockito.exceptions.misusing.InvalidUSEOfMatchersException:
Invalid use of argument matchers!
3 matchers expected,2 recorded:
-> at com.spotify.adaccountservice.utils.RoleUtilsTest.test_addOrRemoveRole_AddUserToAdAccount(RoleUtilsTest.java:179)
-> at com.spotify.adaccountservice.utils.RoleUtilsTest.test_addOrRemoveRole_AddUserToAdAccount(RoleUtilsTest.java:180)
我知道我们不喜欢这里的代码屏幕截图,但是我想说服它确实在以下行号处发生:
这是实际方法:
所以有点奇怪。当该方法具有4个参数时,为什么期望有3个匹配器?当我对所有这些都使用eq()
时,为什么只“记录”其中的2个?
自我回答,因为错误将我误导了。 (或者,也许有人可以解释为什么它实际上是准确的。)
解决方法
原来是因为我的第三个参数portcullisUtils
中的一个变量是我忘记为getAdAccountRoleId(...)
存根的模拟对象。
我想程序当然不能真正告诉我,我不是故意要与这样的抽象相匹配,而是做了一些奇怪的事情。
将接受任何人的回答都可以解释为什么这些特殊错误消息。