Mock对象是一种方便写单元测试的辅助工具。当被测试的某个类需要依赖其它类的时候,采用Mock对象可以模拟出依赖对象的类型和一些特定的调用,从而隔离了被测试单元之间的互相影响。比如你的某个业务逻辑组件需要调用数据库,这个时候就可以用Mock对象模拟出数据库,并给出一些设定好的调用数据,这样当对业务逻辑组件进行测试的时候,即使数据库崩溃也不会让该业务逻辑组件的单元测试亮出一盏红灯。

Rhino Mocks 是一个.Net平台下的Mock工具,Rhino.Mocks源于EasyMock.Net,它试图提供一种更简单的方法去创建和使用mock objects且使你得到更好的重构支持。 它结合了EasyMock.Net和NMock的方式。.NET 有许多不同的模拟框架,在定义模拟的目标和返回的信息方面,每个框架稍有不同。Rhino.Mocks 是由 Oren Eini(又名 Ayende Rahien)开发的一个开源框架,由于它可以提供强类型化的模拟对象,因而从众多模拟中脱颖而出。大多数可用的模拟框架要求使用硬编码的字符串来定义方法名称和参数,这就意味着您只有在实际运行测试的过程中才会知道存在的潜在问题。Rhino.Mocks 允许使用强类型化的模拟对象,从而使您可以获得编译的所有优点,帮助您尽早发现错误。

您创建的单元测试越多,运行这些单元测试所需的时间就越长。理想的情形是,单元测试的运行只需几秒钟,这样开发人员每次创建应用程序时都可以运行这些测试。然而,目前大多数应用程序都十分依赖于数据库、Web 服务以及许多其他的外部相关对象。一个大型单元测试如果使用了它们中的任何一个,都不可能在几秒钟内完成。

事实上,可以让您的单元测试快速运行的唯一方法就是用某物来模拟这个外部相关对象。这时模拟就派上用场了。模拟是让一些对象伪装成您的外部相关对象,以便代码可以使用模拟对象代替外部对象来正常运行。这不仅保证了您的测试可以快速运行,而且更重要的是,它可以让您专注于代码功能的测试,而不是外部相关对象。另外,您还可以对代码和外部相关对象之间的交互进行测试。您将不仅仅对业务层是否可以成功返回对象进行测试,而且还可以测试它是否会在您的数据访问层上调用特定的方法以便检索该对象。

Rhino.Mocks 允许使用的模拟类型也不是固定的。普通的模拟对象在遇到意外的方法调用时会引发异常。但 Rhino.Mocks 提供了一个动态的模拟对象,在遇到意外的方法调用时会返回“null”或“0”,而不是引发异常。最后,Rhino.Mocks 允许使用部分模拟,这就可以使它在没有定义预期值的情况下避免引发异常,它会在对象上调用最初的方法并返回该值,而不是返回“0”或“null”。这就让您可以只模拟某个对象上所需的方法。

Rhino.Mocks 还提供了许多其他有用的功能,包括对通用类型的支持、回调,以及模拟委托和事件的能力。

转载于:https://www.cnblogs.com/bugua/archive/2012/01/04/2311821.html

Net平台下的Mock工具---Rhino Mocks相关推荐

  1. windows平台下用CMake工具编译osg用法说明

    最近研究osg,用CMake工具将osg源码转为VS下的工程.解决方案,开始时不懂,走了很多弯路,现在将自己理解的记录如下: 1):在CMake图形界面中的"Where is the sou ...

  2. 【工具使用系列】Windows 10 平台下的TTS工具 Balabolka

    TTS工具 Balabolka 如何将文本转化为语音或者音频文件呢?使用Balabolka. Balabolka是一个文本转语音(TTS)程序.Balabolka可以使用系统上安装的所有计算机语音.屏 ...

  3. Linux平台下QtCreator集成代码静态分析工具clang-tidy和Clazy

    Linux平台下QtCreator集成代码静态分析工具clang-tidy和Clazy 原文连接: https://blog.csdn.net/wsj18808050/article/details/ ...

  4. linux平台下QtCreator中集成Valgrind系列工具

    linux平台下QtCreator中集成Valgrind系列工具 ###1.valgrind 安装 valgrind 安装 2.打开QtCreator >> Analyze 你就会发现 这 ...

  5. linux oraclerman自动备份,Linux平台下的Oracle自动备份案例(使用RMAN)

    有个童鞋问rman的自动备份脚本程序,我之前有写过exp备份指定方案自动备份案例(Linux平台下的Oracle自动备份案例(使用exp工具)  http://www.linuxidc.com/Lin ...

  6. .net平台下C#socket通信(中)

    本文主要讲述: 1.正常通信中握手建立 2.一对多的通信 3.发送接收数据格式转换 4.资源释放 5.开启并保持服务监听 1.握手建立正常的通信通道 项目需要通信的双方(假设是一个上位机.一个下位机) ...

  7. Linux系列-Red Hat5平台下的LAMP网站服务搭建(四)

    Linux系列-Red Hat5平台下的LAMP网站服务搭建(四)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com: ...

  8. BEA WebLogic平台下J2EE调优攻略--转载

    BEA WebLogic平台下J2EE调优攻略   2008-06-25 作者:周海根 出处:网络   前 言 随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供 ...

  9. Mac平台下Opencv开发环境搭建

    OpenCV(Open Source Computer Vision Library),是一个开源的跨平台的计算机视觉库,它实现了图像处理和计算机视觉领域的很多通用算法,可以在多种计算机平台上运行,支 ...

  10. Windows平台下Makefile学习笔记

    来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安 ...

最新文章

  1. Myeclipse 10 利用工具生成网络服务接口并调用
  2. 【人工智能】深度学习自动构图研究报告
  3. “打”遍全球!支付宝重磅新功能上线...
  4. 基于vue + element 的后台管理系统
  5. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-9.使用JWT生成用户Token回写客户端...
  6. Java中 Cloneable 、Serializable 接口详解
  7. java中如何写前端代码怎么写_如何编写规范的、可维护的前端代码?
  8. 打造爆款关键词选择10种方法
  9. 数据结构-六度空间(模拟六度分隔理论)
  10. 基于auto.js的微信朋友圈自动点赞脚本
  11. BinaryBomb实验
  12. [苹果开发者账号]04 申请苹果开发者账号 美国报税表
  13. 为什么python文件会闪退_困扰已久的问题--python文件打开方式?为什么打开py文件会闪退!...
  14. java ascii码大小写转换_使用「ASCII」转换大小写
  15. 小程序快速生成朋友圈海报分享图
  16. Trove系列(七)——Trove的Mysql的复制功能介绍
  17. 2022年营收增长高达70%,智云健康“医院为先”战略成效持续凸显
  18. 苹果新专利获授权;谷歌因 反竞争 的安卓政策在印度被罚款;微软将很快支持编辑器校对电子邮件| 每日大事件...
  19. 我们为什么需要光纤配线架
  20. k8s二进制安装-3,配置ca证书

热门文章

  1. not in与NOT EXISTS亲历的差别体验
  2. 解决IIS7.5及以后中URL文件名有加号或空格导致显示404错误的问题
  3. 14. Thinking carefullly about copying behavior in resource-managing classes
  4. html定义页脚有什么用,HTML5中footer标签的用法你知道吗?,HTML5中的footer标签是什么意思?...
  5. PHP导航栏管理,zblog导航栏管理设置的几种方法
  6. latex 左对齐_LaTeX从入门到提高(3)
  7. MapReduce job任务源码提交流程
  8. 解决mysql不是内部或外部命令 菜鸟教程
  9. python 几何计算_计算几何-凸包算法 Python实现与Matlab动画演示
  10. 斜杠“/”与反斜杠“\”的区别