Mockito测试报错‘Misplaced or misused argument matcher detected’求助
问题原因及解决方案
你触发错误的核心原因是Mockito不允许在存根(when语句)或验证方法时混合使用参数匹配器和实际参数。你这里用了any(GeneratePaymentTicketRequest.class)这个匹配器,却给第二个参数传了实际字符串spokesmanDocumentNumber,这种混合写法违反了Mockito的规则,导致报错。
解决方法有两种,选一种即可:
方法一:用eq()匹配器替代实际参数
把实际字符串换成eq()匹配器,这样两个参数都使用Mockito的匹配器,符合规则:
when(paymentTicketService.generatePaymentTicket(any(GeneratePaymentTicketRequest.class), eq(spokesmanDocumentNumber))).thenReturn(paymentTicketPdfResponse);
eq(spokesmanDocumentNumber)的作用是匹配等于该字符串值的参数,效果和直接传实际值完全一样,但属于合法的参数匹配器。
方法二:用任意字符串匹配器(如果不需要精确匹配)
如果你的测试不需要精确匹配第二个参数,也可以用anyString()匹配任意字符串:
when(paymentTicketService.generatePaymentTicket(any(GeneratePaymentTicketRequest.class), anyString())).thenReturn(paymentTicketPdfResponse);
内容的提问来源于stack exchange,提问作者Vinicius Garcia
相关产品推荐
相关产品推荐

