尽管仅使用匹配器,但Mockito InvalidUseOfMatchersException提示似乎提到了错误的参数数量

问题描述

即使我使用所有匹配器,我也遇到了众所周知的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)

我知道我们不喜欢这里的代码屏幕截图,但是我想说服它确实在以下行号处发生:

enter image description here

这是实际方法

enter image description here

所以有点奇怪。当该方法具有4个参数时,为什么期望有3个匹配器?当我对所有这些都使用eq()时,为什么只“记录”其中的2个?

自我回答,因为错误将我误导了。 (或者,也许有人可以解释为什么它实际上是准确的。)

解决方法

原来是因为我的第三个参数portcullisUtils中的一个变量是我忘记为getAdAccountRoleId(...)存根的模拟对象。

我想程序当然不能真正告诉我,我不是故意要与这样的抽象相匹配,而是做了一些奇怪的事情。

将接受任何人的回答都可以解释为什么这些特殊错误消息。