专栏首页CWIKIUSMockito 2 参数匹配器
原创

Mockito 2 参数匹配器

Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值。有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argument matchers)。

请参考下面的代码:

//stubbing using built-in anyInt() argument matcherwhen(mockedList.get(anyInt())).thenReturn("element"); //stubbing using custom matcher (let's say isValid() returns your own matcher implementation):when(mockedList.contains(argThat(isValid()))).thenReturn("element"); //following prints "element"System.out.println(mockedList.get(999)); //you can also verify using an argument matcherverify(mockedList).get(anyInt()); //argument matchers can also be written as Java 8 Lambdasverify(mockedList).add(argThat(someString -> someString.length() > 5));

参数匹配运行进行灵活校验或者打标。

请访问 https://static.javadoc.io/org.mockito/mockito-core/3.0.0/org/mockito/hamcrest/MockitoHamcrest.html 链接来查看更多有关自定义参数匹配器/hamcrest matchers(custom argument matchers/hamcrest matchers)的内建参数匹配器和示例。

更多有关 自定义参数匹配器(custom argument matchers)的使用,请参考 ArgumentMatcher 类的 API 文档。

在使用复杂参数匹配器的时候需要谨慎。尝试给一个干净并且简单的测试的时候,尽量选择自然的参数匹配使用的是  equals() 对比相对偶然使用  anyX() 来说。有时候可能对你的代码进行一些重构来允许  equals() 进行匹配,或者可以实现(implement)equals()方法来帮助进行测试。

同时,请阅读 Capturing arguments for further assertions (Since 1.8.0) 页面中的内容,或者参考 ArgumentCaptor 类的 API。

ArgumentCaptor 是有关参数匹配器的是特殊实现,能够为后面的对比(assertions)捕获参数变量。

参数匹配器的写法

如果你现在正在使用参数匹配器,所有参数(all arguments)都必须由 matches 提供。

下面的示例代码显示校验,但是一些将会应用到打标中。

verify(mock).someMethod(anyInt(), anyString(), eq("third argument"));//above is correct - eq() is also an argument matcher verify(mock).someMethod(anyInt(), anyString(), "third argument");//above is incorrect - exception will be thrown because third argument is given without an argument matcher.

像 anyObject()eq() Matcher 方法不会返回 matchers。

在内部,他们将会在堆栈(stack)中记录一个 matcher 然后返回一个虚假的值(通常为 null)。

这种实现方式是基于 Java 编译器中有关静态类型的安全性问题而考虑的,从而带来的结果是你不能在 verified/stubbed 方法外部使用 anyObject()eq()

https://www.cwiki.us/display/MockitoZH/Argument+matchers

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mockito 2 参数匹配器

    Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值。有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argume...

    HoneyMoose
  • Discourse 数据分发

    我们可能希望 Discourse 能够使用 RSS 或者 json 格式对数据对外进行发布和传输。

    HoneyMoose
  • Discourse 数据分发

    我们可能希望 Discourse 能够使用 RSS 或者 json 格式对数据对外进行发布和传输。

    HoneyMoose
  • Mockito 2 参数匹配器

    Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值。有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argume...

    HoneyMoose
  • 推广渠道如何分析?

    有两个Excel表是A、B两个渠道推广导出的玩家用户明细数据,自选分析角度,产出数据分析报告。(某游戏公司面试题)

    猴子聊数据分析
  • Kaggle赛题解析:逻辑回归预测模型实现

    作者: 寒小阳 &&龙心尘 原文:http://blog.csdn.net/han_xiaoyang/article/details/49797143 ...

    机器学习AI算法工程
  • 我如何将亿次的计算降为实时

    前期我们做了一个小程序,实现集体照片的自动分发。简单来说就是用户上传一张集体照,凡是出现在集体照中的人都能自动关联到此张照片,有点类似 QQ 和 FB 之前的标...

    魏守峰
  • 跳出率骗局,带你洞察跳出率背后的真相

    虽然保持一个较低的平均跳出率是网站优化的很重要的部分,但是许多人并不真的了解跳出率对转化真正的作用。

    iCDO互联网数据官
  • Kaggle赛题解析:逻辑回归预测模型实现

    Kaggle是一个数据分析建模的应用竞赛平台,有点类似KDD-CUP(国际知识发现和数据挖掘竞赛),企业或者研究者可以将问题背景、数据、期望指标等发布到Kagg...

    机器学习AI算法工程
  • 一起来学 SpringBoot 2.x | 第四篇:整合 Thymeleaf 模板

    摘要: 原创出处 http://blog.battcn.com/2018/04/28/springboot/v2-web-thymeleaf/ 「唐亚峰」欢迎转...

    芋道源码

扫码关注云+社区

领取腾讯云代金券