org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 参数匹配器的使用无效!预期 2 个匹配器,记录 3 个

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 2 matchers expected, 3 recorded

我知道在这个平台上已经被问过多次了。我还检查了解决方案,前提是要么使用所有原始参数,要么使用所有 Matcher 参数。在我的例子中,Argument Matcher(any, anyString) 已用于所有参数,但仍然出现错误。

代码:

Mockito.when(service.createReq(Mockito.any(RequestDto.class))).thenReturn(Mockito.any(TermReq.class));
Mockito.when(utils.sendPOSTRequest(Mockito.anyString(),Mockito.anyString())).thenReturn(Mockito.anyString());

上面一行的错误是:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
2 matchers expected, 3 recorded:

谁能指出可能是什么问题。

谢谢,

您不能 return 来自模拟方法的参数匹配器,例如 thenReturn(Mockito.any(TermReq.class))。这是无效的使用。

您应该 return 一个实际值或一个参数捕捉器。

如果你想模拟方法的 return 值,你应该决定什么对象将 return 在 when 子句之后。你不能 return 一个新的参数匹配器。我建议在您的测试场景中 return 新模拟对象,如下所示:

TermReq termReq = Mockito.mock(TermReq.class);  // create mock
Mockito.when(termReq.getId()).thenReturn(1L) // mock required get methods
Mockito.when(service.createReq(Mockito.any(RequestDto.class))).thenReturn(termReq); // then return in case of the service method call

使用这种用法,您可以处理结果或将结果与模拟对象进行比较。