深入理解mockito

初次使用 Mockito,能够感受到它的神奇,尤其是这样的语法:

when(mockedList.get(0)).thenReturn("one")

指定当get方法被调用,并且参数为0的时候,返回”one”。

初次使用Mockito可能会觉得很奇怪,为什么在when()方法里执行一次方法调用,就能够记住被mock方法的信息呢?

事实上根本不需要在when()方法里边进行stub操作,在任何地方stub都是可以的。例如:

// 设置mock对象的行为 - 当调用其get方法获取第0个元素时,返回"one"
String str = mockedList.get(0);
Mockito.when(str).thenReturn("one");

这样的操作一样可以通过单元测试。事实上我们被这样的固定写法蒙蔽了,我们可以看一下mockito源代码是怎样处理的:

public <T> OngoingStubbing<T> when(T methodCall) {
this.mockingProgress.stubbingStarted();
return (OngoingStubbing)this.stub();
}

可以看到这个methodCall根本没有用到,它的作用根本不是用来保存方法信息的,它的作用是为了保存方法的返回值类型,使返回值与thenReturn返回的类型一致。

那么mockito是怎么保存方法的信息呢?如果是一般的写法估计会是这样:

Mockito.returnValueWhen("one", mockedList, "get", 0);
第一个参数描述要返回的结果,第二个参数指定mock对象,第三个参数指定mock方法,后面的参数指定mock方法的参数值

但是mockito没有用这么直白的写法,而是使用了动态代理来实现的。这里只说一下思路:当使用Mockito.mock(List.class);生成一个mock对象时,其实是生成一个代理对象。当执行when()stub操作时,就可以利用动态代理记住被mock方法的信息。

具体代码可参考:https://coding.net/u/tanhe123/p/MockitoSamples

深入理解mockito的更多相关文章

  1. 使用 Mockito 单元测试 – 教程

    tanyuanji@126.com 版本历史 - - - - 使用 Mockito 进行测试 该教程主要讲解 Mockito 框架在Eclipse IDE 中的使用   目录 tanyuanji@12 ...

  2. Mock以及Mockito的使用

    mockito http://www.vogella.com/tutorials/Mockito/article.html 原文地址: http://www.open-open.com/lib/vie ...

  3. 提升单元测试体验的利器--Mockito使用总结

    为神马要使用Mockito? 在编写单元测试的时候,为了尽可能的保证隔离性,我们时常需要对某些不容易构造或者不容易获取或者对外部环境有依赖的对象,用一个虚拟的对象来创建以便于测试.假设你正在开发的的代 ...

  4. 单元测试系列:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  5. Mockito单元测试

    Mockito简介 Mockito是一个单元测试框架,需要Junit的支持.在我们的项目中,都存在相当多的依赖关系,当我们在测试某一个业务相关的接口或则方法时,绝大多数时候是没有办法或则很难去添加所有 ...

  6. 单元测试系列之五:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  7. Mock及Mockito使用

    mockito http://www.vogella.com/tutorials/Mockito/article.html 原文地址: http://www.open-open.com/lib/vie ...

  8. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  9. 使用强大的 Mockito 测试框架来测试你的代码

    原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...

随机推荐

  1. 如何在不重启或重新格式化hadoop集群的情况下删除集群节点

    在master节点上的hadoop安装目录下 进入conf目录 配置hdfs-site.xml文件 添加节点如下: <property> <name>dfs.hosts.exc ...

  2. tomcat进阶操作

      1.使用war包部署web站点 [root@tomcat webapps]# pwd /application/tomcat/webapps [root@tomcat webapps]# rz   ...

  3. testform

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. JAVA加解密 -- Base64加解密

    Base64算法实现:可以将任意的字节数组数据,通过算法,生成只有(大小写英文.数字.+./)(一共64个字符)内容表示的字符串数据. private static final String str ...

  5. 对AOP切面的一些整理与理解

      首先上一张AOP的图示 一:几个重要的概念   1> 切面:横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象[验证切面.日志切面]   2> 通知:切面中的每个方法   3& ...

  6. Jmeter变量参数化及函数应用

    分类: 测试工具 2006-12-14 10:54 12041人阅读 评论(5) 收藏 举报 javascriptloadrunnerrandom脚本测试多线程 我们在使用Jmeter录制脚本后,经常 ...

  7. http Referrer-Policy

    Referrer-Policy: no-referrer Referrer-Policy: no-referrer-when-downgrade Referrer-Policy: origin Ref ...

  8. 保存Hive查询结果的方法

    很多时候,我们需要将Hive的查询(select)结果保存起来,方便进一步处理或查看.在Hive里面提供了不同的方式来保存查询结果,在这里做下总结: 一.保存结果到本地 方法1:调用hive标准输出, ...

  9. Linux下(centos6.8)JDK1.8的安装与配置

    今天说下在Linux(centos6.8)系统下的JDK安装与配置. 据我所知的jdk安装方式有三种(rpm.yum方式没用过,暂且不提)今天只说解压安装方式: 一.解压jdk安装包: 附上jdk1. ...

  10. objective-c的观察者模式

    addObserver即添加消息响应函数.postNotificationName即发消息.