mockito 参数匹配的三种情况


mock方法时,总会因场景不同,调整参数的匹配情况。比如:某个参数是为了在数据库进行模糊查询的;或则精确匹配时,引用类型参数未实现equals方法。这时候就需要mock方法时,进行不同匹配。

1. 参数精确匹配
    Map mockMap = Mockito.mock(Map.class);
    // 1.精确匹配
    Mockito.when(mockMap.get(11)).thenReturn(111); // 基础类型
    Mockito.when(mockMap.get(Lists.newArrayList("袁紫霞"))).thenReturn("白玉京"); // 引用类型
    TestCase.assertEquals(111, mockMap.get(11));
    TestCase.assertEquals("白玉京", mockMap.get(Lists.newArrayList("袁紫霞")));
2. 参数模糊匹配
    //多个参数,其中一个定义了匹配规则(Matcher),其他的全要Matcher
    Mockito.when(mockMap.get(Mockito.endsWith("天"))).thenReturn("龙傲天"); // 字符串。eg:以天结尾的
    Mockito.when(mockMap.get(Mockito.anyLong())).thenReturn(999L); // 基础类型. eg:任何long类型
    Mockito.when(mockMap.get(Mockito.any(User.class))).thenReturn(new User()); // 引用类型
    TestCase.assertEquals("龙傲天", mockMap.get("星期天"));
    TestCase.assertEquals(999L, mockMap.get(1L));
    TestCase.assertEquals(new User(), mockMap.get(new User()));
3. 参数自定义匹配

Mockito.argThat(ArgumentMatcher< T>):

    // 3.自定义匹配。 eg:定义只匹配PageParam的pageNo属性
    PageParam pageParam = PageParam.create(1, 20);
    ArgumentMatcher<PageParam> argPage = (page) -> page.getPageNo() == pageParam.getPageNo();
    Mockito.when(mockMap.get(Mockito.argThat(argPage))).thenReturn(Lists.newArrayList("袁紫霞", "白玉京"));
    TestCase.assertEquals(Lists.newArrayList("袁紫霞", "白玉京"), mockMap.get(PageParam.create()));
4. 参考资料

mockito文档:https://www.javadoc.io/doc/org.mockito/mockito-core/3.0.0/index.html
ArgumentMatcher参数文档:https://www.javadoc.io/doc/org.mockito/mockito-core/3.0.0/org/mockito/ArgumentMatcher.html

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值