Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mockito 2 参数匹配器

Mockito 2 参数匹配器

原创
作者头像
HoneyMoose
修改于 2019-09-23 02:58:36
修改于 2019-09-23 02:58:36
8350
举报
文章被收录于专栏:CWIKIUSCWIKIUS

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
博文精选|Mockito使用指南
https://blog.csdn.net/shensky711/article/details/52771493(点击阅读原文前往)
java达人
2018/12/24
4.3K0
Java单元测试Mock框架Mockito入门介绍
Mockito是Java的单元测试Mock框架。它的logo是一杯古巴最著名的鸡尾酒Mojito,Mojito鸡尾酒,源自古巴的哈瓦那,带有浓厚的加勒比海风情。并不浓烈,但是喝一杯下去,脸上会泛起红晕,象少女的羞涩。味道很清新,有一点青涩、有点甜蜜。
dongfanger
2021/07/21
4.5K0
单元测试框架spock和Mockito应用
spock是一款基于Groovy语言的单元测试框架,其基础也是Java的Junit,目前最新版已经到了2.0,但对Groovy和响应的Java版本要求较高,具体信息参考:Spock 2.0 M1版本初探。
FunTester
2020/05/18
2.4K0
Mockito模拟进行单元测试
    MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就是Mockito。
chinotan
2019/07/15
9.6K0
Mockito模拟进行单元测试
Mockito 2 关于打标(stubbing)
https://github.com/cwiki-us-demo/mockito-demo-java/blob/master/src/test/java/com/ossez/demo/mockito/MockitoStubbingTest.java
HoneyMoose
2019/09/18
7080
Mockito 2 关于打标(stubbing)
单元测试指南
在我们公司中要做单元测试,确实比较难,因为公司缺少这种氛围,有也只是局部的,大多数工程师没有这方面的习惯和素养,很多人都是有一定的抵触的心理,经过我私下的了解大概有以下几种原因吧。
Abalone
2022/07/14
6.3K0
单元测试指南
Java单元测试框架之Mockito指南
Mockito 框架是用于单元测试的基本框架,本文将介绍其使用使用方法及作用,也会给出相对应的例子作为参考。详细的业务场景可以参考一下项目中的单元测试编写。文中最后也有关于单元测试的相关文章链接,大家可以去详细了解一下。
苦叶子
2024/04/14
3.4K0
Java单元测试框架之Mockito指南
Mockito鸡尾酒第一杯 Java单测Mock
并不浓烈,但是喝一杯下去,脸上会泛起红晕,象少女的羞涩。味道很清新,有一点青涩、有点甜蜜。
dongfanger
2020/09/23
9040
Mockito鸡尾酒第一杯 Java单测Mock
[Java]单元测试组件Mockito
Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。什么是不容易构造的对象呢?例如HttpServletRequest,需要在有servlet容器环境中创建获取。那不容易获取的对象呢?如一个JedisCluster,需要准备redis相关环境,然后设置进去等等。
宇宙无敌暴龙战士之心悦大王
2023/04/03
4.2K1
mockit测试
//静态导入mockit包 import static org.mockito.Mockito.*; //创建mock,mock一个接口 List mockedList = mock(List.class); //使用mock对象 mockedList.add("one"); mockedList.clear(); //验证行为 verify(mockedList).add("one"); verify(mockedList).clear(); //mock具体的类 L
用户5344449
2019/05/07
1.5K0
使用强大的 Mockito 来测试你的代码
这篇教程介绍了如何使用 Mockito 框架来给软件写测试用例。 1、预备知识 如果需要往下学习,你需要先理解 Junit 框架中的单元测试。 如果你不熟悉 JUnit,请查看下面的教程: http://www.vogella.com/tutorials/JUnit/article.html 2、使用mock对象来进行测试 2.1 单元测试的目标和挑战 单元测试的思路是在不涉及依赖关系的情况下测试代码(隔离性),所以测试代码与其他类或者系统的关系应该尽量被消除。一个可行的消除方法是替换掉依赖类(测试替换),
用户1332428
2018/03/09
11.3K0
使用强大的 Mockito 来测试你的代码
单元测试以及JUnit框架解析
我们都有个习惯,常常不乐意去写个简单的单元测试程序来验证自己的代码。对自己的程序一直非常有自信,或存在侥幸心理每次运行通过后就直接扔给测试组测试了。然而每次测试组的BUG提交过来后就会发现自己的程序还存在许多没有想到的漏洞。但是每次修改好BUG以后还是怀着侥幸心理,认为这次不会有bug了。然后又一次自信地提交,结果又败了。因为这样反复几次后。开发者花在找BUG和修复BUG的这些时间加起来已经比他开发这个模块花的时间还要多了。虽然项目经理已经预留了修改BUG和单元测试的时间。但是开发者却习惯性地在写好代码后就认为任务完成了。 然后等问题出来了bug改了很多次还是修复不了的时候才和项目经理说“我碰到预想不到的问题,可能要延期发布我的代码“。如果这个项目不可延期,痛苦的加班就无法避免了。
幺鹿
2018/08/21
2.4K0
IDEA 中如何使用Mockito框架
在之前的文章中我们分享过一些非常知名的测试框架, Mockito就是其中之一, 在分享Mockit之前, 先聊聊它处在哪个部分? 在单元测试自动化体系里有4个关键部分组成: 构建管理: Maven/
louiezhou001
2020/03/25
4.6K0
#Android单元测试学习总结「建议收藏」
在Android Studio中新建一个项目的时候,app的gradle中会默认添加单元测试的相关依赖库:
全栈程序员站长
2022/09/06
5.2K0
#Android单元测试学习总结「建议收藏」
iOS_单元测试三之OCMock使用
调用一个函数:已经存根的就触发存根的(Stub);未存根的就触发原有实例的(aPerson)。
mikimo
2022/07/20
3.3K0
iOS_单元测试三之OCMock使用
Mockito和PowerMock用法
在单元测试中,我们往往想去独立地去测一个类中的某个方法,但是这个类可不是独立的,它会去调用一些其它类的方法和service,这也就导致了以下两个问题:外部服务可能无法在单元测试的环境中正常工作,因为它们可能需要访问数据库或者使用一些其它的外部系统。我们的测试关注点在于这个类的实现上,外部类的一些行为可能会影响到我们对本类的测试,那也就失去了我们进行单测的意义。
一滴水的眼泪
2020/09/24
3.3K0
使用ChatGPT生成关于登录产品代码的单元测试代码
CookiesManager.java、DBuser.java、login.java、register.java和User.java。validateUser.java和Util.javam没有发生变化。
顾翔
2024/12/19
990
使用ChatGPT生成关于登录产品代码的单元测试代码
Mocktio 使用(上)
注意,mock 对象的方法的返回值默认都是返回类型的默认值。例如,返回类型是 int,默认返回值是 0;返回类型是一个类,默认返回值是 null。
HLee
2021/09/27
1.8K0
Mocktio 使用(上)
Spring Boot 应用的测试Spring Boot 应用的测试
本书写到这里,Spring Boot 2.0.0.RC1版本已经于2018.1.31 发布。这是本书最后一章,本章介绍 Spring Boot 应用的测试(质量保障)相关的内容。我们在项目开发中使用分层架构,在测试中也进行分层测试。 1.1 准备工作 本节先来创建一个基于Spring MVC、 Spring Data JPA的 Spring Boot, 完成Dao 层、 Service 层、Controller 层代码的编写,为后面的测试代码的编写做准备。 使用http://start.spring.io/ 创建项目、导入此 Gradle 项目到 IDEA 中。配置 Kotlin Compiler 版本与Target JVM 版本。最后等待项目构建完毕。我们将得到一个初始Spring Boot 工程。详细的代码参考本章给出的示例工程源码。 下面我们来详细讲解怎样针对 Spring Boot 项目进行分层测试。 1.2 分层测试 我们在开发阶段过程中,单元测试通常是必要的。Spring Boot 提供的spring-boot-test 模块基于 spring-test 模块和junit 框架,封装集成了功能强大的结果匹配校验器assertj 、hamcrest Matcher、 Web 请求 Mock 对象、 httpclient、JsonPath (测试 JSON 数据)、mockito、selenium等。 测试代码通常放在 src/test 目录下,包目录规范是跟 src/main 目录保持一致。测试代码目录结构设计如下
一个会写诗的程序员
2018/08/17
1.6K0
编写你的第一个 Android 单元测试
  本文主要面向单元测试新手,首先简单介绍了什么是单元测试,为什么要写单元测试,讨论了一下 Android 项目中哪些代码适合做单元测试,并以一个简单例子演示了如何编写属于你的第一个 Android 单元测试(kotlin 代码)。
顾翔
2019/12/12
1.8K0
编写你的第一个 Android 单元测试
相关推荐
博文精选|Mockito使用指南
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档