mockito 參數匹配 模糊匹配 (二)

mock方法時,總會進行參數的匹配;情況不同,參數的匹配也可以不一樣。比如:某個參數是爲了在數據庫進行模糊查詢的,這時候參數值不同,結果可能也相同;這時候就需要mock方法時,進行參數值的模糊匹配。

接着上一篇文章的問題;因爲分頁Page沒有重寫equals和hashCode方法引起的參數在精確匹配時匹配不上的問題,之前提出了對類進行方法重寫和繼承之後重寫解決方法。由於類是別人封裝好的jar,那樣解決都不怎麼行,所以退而求其次,對這個參數,我改用了模糊匹配。

參數精確匹配:

// 兩種寫法一樣 eq方法有重載,支持很多類型(相等判斷equals)
Mockito.when(userDAO.findByName("白玉京")).thenReturn(user);
Mockito.when(userDAO.findByName(Mockito.eq("白玉京"))).thenReturn(user);
// 對象精確匹配
Mockito.when(userDAO.find(user)).thenReturn(userDTO);

參數模糊匹配:

// 字符串模糊匹配 eg: 白*
Mockito.when(userDAO.findByName(Mockito.endsWith("白"))).thenReturn(user);
/*
* 只進行類型匹配。 多個參數,其中一個定義了匹配規則,其他的全要定義
* 方法:List<User> queryForPage(User user, Page page, Class clazz);
*/
// 錯誤寫法 InvalidUseOfMatchersException
Mockito.when(userDAO.queryForPage(user, Mockito.any(Page.class), User.class)).thenReturn(userList); 
// 正確寫法
Mockito.when(userDAO.queryForPage(Mockito.eq(user), Mockito.any(Page.class), Mockito.eq(User.class))).thenReturn(userList);

Mockito.when(userDAO.findByMap(Mockito.anyCollection())).thenReturn(listMap);
Mockito.when(userDAO.findByAge(Mockito.anyLong())).thenReturn(list);
// 函數式參數的 Mockito.any(Function.class)

自定義匹配:Mockito.argThat(ArgumentMatcher)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章