Mockito: InvalidUseOfMatchersException

本文介绍了一种在使用PowerMock进行单元测试时遇到的InvalidUseOfMatchersException错误及其解决方案。错误源于混合使用Matchers和原始值,正确的做法是所有参数都通过Matchers提供。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在项目中采用powermock进行单元测试,发现使用Matchers结果报如下错误

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
4 matchers expected, 3 recorded:
-> at com.yihaodian.wap.service.AddressServiceTest.testInsertGoodReceiverByTokenV2(AddressServiceTest.java:136)
-> at com.yihaodian.wap.service.AddressServiceTest.testInsertGoodReceiverByTokenV2(AddressServiceTest.java:136)
-> at com.yihaodian.wap.service.AddressServiceTest.testInsertGoodReceiverByTokenV2(AddressServiceTest.java:136)

This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.

原始代码如下:

httpHelpMock.callShopInterfaceObj("addGoodReceiver", Matchers.any(Object[].class), Matchers.any(Type.class),"/myyhdmobile/address/addGoodReceiver.do",true);


public void callShopInterfaceObj(String methodName, Object[] objs,Type t,String shopurl2,Object reObj){
		PowerMockito.when(HttpHelper.callShopInterfaceObj(methodName, objs, t, shopurl2)).thenReturn(reObj);
	}

怎么也调试不出来

最后查看了这篇文章

http://stackoverflow.com/questions/14845690/mockito-invaliduseofmatchersexception

做修改如下:

httpHelpMock.callShopInterfaceObj(Matchers.eq("addGoodReceiver"), Matchers.any(Object[].class), Matchers.any(Type.class),Matchers.eq("/myyhdmobile/address/addGoodReceiver.do"),true);

主要差异是对传入的字符串做了Matchers.eq()动作

原因:使用Matchers不能只针对部分参数,所有参数都应该采用Matchers

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值