單元測試 - mock異常


最近在使用mock進行單元測試的時候,遇到了下面的問題:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
1 matchers expected, 2 recorded:
-> at com.xxx.xxx.clearing.mock.AccountUpdateMock.execute(AccountUpdateMock.java:38)
-> at com.xxx.xxx.clearing.mock.AccountUpdateMock.execute(AccountUpdateMock.java:38)

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.

 

看提示是告訴我們,如果有一個參數用了匹配,那么所有的參數都必須采用匹配。

 

但是我的用法是:

public List<Account> getUpdateAccountList(Date startDate, Date endDate) {
AccountQuery param = new AccountQuery();
param.setUpdateTimeStart(startDate);
param.setUpdateTimeEnd(endDate);
return accountService.updateAccountList(param);
}

然后mock:
Mockito.when(prepare.getUpdateAccountList(Mockito.any(), Mockito.any())).thenReturn(accMods);
兩個參數均是用的any匹配,還是報上述錯誤。

后面有兩種辦法解決:
方法1:定義一個
Date date = Mockito.any();
Mockito.when(prepare.getUpdateAccountList(date, date)).thenReturn(accMods);

方法2:
public List<Account> getUpdateAccountList(AccountQuery param) {
    return accountService.updateAccountList(param);
}
初步懷疑是,因為兩個參數都是Date類型,兩個any匹配出錯。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM