Mockito 2 关于打标(stubbing)
请参考下面有关于打标的代码。
//You can mock concrete classes, not just interfaces
LinkedList mockedList = mock(LinkedList.class);
//stubbing
when(mockedList.get(0)).thenReturn("first");
when(mockedList.get(1)).thenThrow(new RuntimeException());
//following prints "first"
System.out.println(mockedList.get(0));
//following throws runtime exception
System.out.println(mockedList.get(1));
//following prints "null" because get(999) was not stubbed
System.out.println(mockedList.get(999));
//Although it is possible to verify a stubbed invocation, usually it's just redundant
//If your code cares what get(0) returns, then something else breaks (often even before verify() gets executed).
//If your code doesn't care what get(0) returns, then it should not be stubbed.
verify(mockedList).get(0);
在默认情况下,所有的方法都会有一个返回值。mock 函数默认返回的是 null,一个空的集合或者一个被对象类型包装的内置类型。例如,针对 int/Integer 将会返回 0,针对 boolean/Boolean 将会返回 false。
打标(Stubbing)可以被重写:例如一个通用的打标可以在启动的时候被确定(fixture),但是测试方法可以对其进行重写(override)。请注意重写的打标可能会在有很多标记的时候存在潜在的问题。
一旦被打标,方法将会总是返回已标记的内容,这个与这个方法被调用多少次无关。
最后的标记非常重要——当你对有相同参数的方法进行多次标记的时候。换句话说就是:标记的顺序是有关的(the order of stubbing matters),但是这个意义并不是很大。例如,这个只在标记完全相同的方法或者有时候参数匹配(argument matchers)被启用的时候,等情况下才会出现。, etc.
测试代码请访问 GitHub
请注意,上面的测试代码在运行的时候回出现错误。
这是因为在测试代码运行的时候,我们尝试输出 mockedList.get(1),这个在测试的时候,因为我们打标为抛出异常,所以这一句话将会在测试代码中抛出异常。
运行时候,抛出异常的界面如下:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
深浅克隆面试题汇总——附详细答案
在开始学习深克隆和浅克隆之前,我们先来看下面代码,有什么问题? class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { // 等号赋值( 基本类型) int number = 6; int number2 = number; // 修改 number2 的值 number2 = 9; System.out.println("number:" + number); System.out.println("number2:" + number2); // 等号赋值(对象) Dog dog = new Dog(); dog.name = "旺财"; dog.age = 5; Dog dog2 = dog; // 修改 dog2 的值 dog2.name = "大黄"; dog2.age = 3; System.out.println(dog.name + "," + dog.age + "岁"); System.out.println(dog2.name + ",...
- 下一篇
剖析nsq消息队列(二) 去中心化代码源码解析
在上一篇帖子剖析nsq消息队列(一) 简介及去中心化实现原理中,我介绍了nsq的两种使用方式,一种是直接连接,还有一种是通过nslookup来实现去中心化的方式使用,并大概说了一下实现原理,没有什么难理解的东西,这篇帖子我把nsq实现去中心化的源码和其中的业物逻辑展示给大家看一下。 nsqd和nsqlookupd的通信实现 上一篇中在启动nsqd时我用了以下命令,我指定了一个参数 --lookupd-tcp-address ./nsqd -tcp-address ":8000" -http-address ":8001" --lookupd-tcp-address=127.0.0.1:8200 --lookupd-tcp-address=127.0.0.1:7200 -data-path=./a --lookupd-tcp-address 用于指定nsqlookupd的tcp监听地址。 nsqd 和 nsqlookupd的通信交流简单来说就是下图这样 nsqd启动后连接nsqlookupd,连接成功后,要发送一个魔法标识nsq.MagicV1,这个标识有啥魔法么,当然不是,他只是用于标...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境