单元测试 Mocking 类库需具备的特性
一个优秀的单元测试 Mocking 类库,需要具备如下几个特性:
- 易用性:有非常明确的 API ,易于使用并易于记忆。
- 健壮性:行为结果始终一致,并保持准确。
- 帮助性:当程序出错时,给出尽可能明确的原因提示。
如果我们所使用的类库没有满足上述条件,编写测试用例的过程将变得复杂和困难,使用类库不仅没有节省时间,反而可能使我们更加迷惑。在这种条件下,我们可能更愿意删除测试用例,之前的工作也就浪费了。
在 .NET 世界中,下面是一些框架或类库的比较:
目前主流的 Mocking 类库都会支持以下主要功能:
- 无需学习 Record/Replay/Verify 模型,仅需 Mock 你需要的类型,进而验证结果或行为。
- 无需学习诸如 mock/stub/fake/dynamic/spy等概念。
- 低学习曲线,API 简单明确,大部分时间不需要翻阅文档。
- 强类型,可直接使用对象类型配置返回值或约束条件。
- 既可以 Mock 接口类型,也可以 Mock 类类型。
- 支持定义覆盖,可以覆盖 Fixture 中的预先配置。
- 当 Mock 类时,可为构造函数传递参数。
- 支持拦截和引发事件通知。
- 直观的支持 out/ref 参数。
下面是一些 Mocking 类库的链接:
- NSubstitute
- Moq
- Rhino Mocks
- Microsoft Fakes Commercial (included with Visual Studio 2012 Ultimate)
- NMock
- EasyMock.NET
- TypeMock Isolator Commercial / Paid
- JustMock Free version and Commercial / Paid version
- FakeItEasy
单元测试 Mocking 类库需具备的特性的更多相关文章
- java多态中哪些成员具备多态特性
在多态的学习中,当子类继承父类时,子类中的变量哪些具备多态特性,哪些不具备多特特性. 代码: class Father{ public static int x=10; public int y=11 ...
- 架构探险笔记4-使框架具备AOP特性(上)
对方法进行性能监控,在方法调用时统计出方法执行时间. 原始做法:在内个方法的开头获取系统时间,然后在方法的结尾获取时间,最后把前后台两次分别获取的系统时间做一个减法,即可获取方法执行所消耗的总时间. ...
- ios7新增基础类库以及OC新特性
新特性: Modules:用XCode5新建工程默认支持modules编译,老项目需在Build Settings里查找modules,找到的Enable Modules选项设置为YES. 对应新增语 ...
- float、定位、inline-block、兼容性需注意的特性总结
inline-block 特性: 1.块在一排显示 2.内联支持宽高 3.默认内容撑开宽度 4.标签之间的换行间隙被解析(问题)[相当字体大小的一半] 5.ie6 ie7不支持块属性标签的inline ...
- Web开发者需具备的8个好习惯
优秀的Web开发人员工作效率更高,因为他们拥有丰富的经验和良好的习惯.作者Gregor Dorfbauer分享了用于Web开发中的8个好习惯,这些良好的工作习惯不仅能提高效率,还能让您创建更加优秀的应 ...
- UI设计需具备的几大素质
近年来,IT产业对于高端技术人才需求加大,特别是北上广和知名企业对人才需求更为迫切,UI设计人员的正在接受UI培训的学员都赢认识到UI设计在未来要求将越来越高,交互设计越来越新颖也将对用户更加友好,兄 ...
- 一个前端所需具备的PS能力
前端网页设计+静态实现案例 放一个2天半内给某公司完成的(设计 + 静态实现)的案例吧,静态阴影用CSS3实现的http://www.cnblogs.com/MuYunyun/p/5693615.ht ...
- 架构探险笔记5-使框架具备AOP特性(下)
开发AOP框架 借鉴SpringAOP的风格,写一个基于切面注解的AOP框架.在进行下面的步骤之前,确保已经掌了动态代理技术. 定义切面注解 /** * 切面注解 */ @Target(Element ...
- 一个GIS系统需具备的功能
数据的存储(数据结构) 图形显示 功能:拓扑分析 开源的GIS系统:QGIS,SharpMap 各个功能组件
随机推荐
- redis集群出现JedisNoReachableClusterNodeException异常(No reachable node in cluster)
上午午好好的,突然抛了如下异常: Exception in thread "main" redis.clients.jedis.exceptions.JedisNoReachabl ...
- xcode5-ios7-如何添加120x120、152x152、76x76图标
以120x120为例: 添加Icon_120x120.png-->.plist添加Icon files-->App Icons自动变化 1. 2. 3. ================= ...
- LINUX内核分析第七周学习总结:可执行程序的装载
LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...
- AEScrypto WEB and ANDROID (GITHUB)
https://github.com/evgenyneu/aes-crypto-android https://github.com/evgenyneu/aes-crypto-web https:// ...
- [python] import curses
python 中,我们使用 curses.wrapper 来创建终端交互window.使用 stdscr 来代表 window 对象. 使用方法: from curses import wrapper ...
- jdk1.6 反射性能对比
ReflectPerformance.java package aaa.bbb.ccc; import java.lang.reflect.Method; public class ReflectPe ...
- PHP--字符串处理函数
字符串的声明 1. 2. 3. [注]单引号与双引号声明字符串的区别: 1.strlen():获取字符串长度 2.substr():截取字符串 3.strpos():查找字符串在指定字符串中的位置 4 ...
- HTTP协议-引自孤傲苍狼博客
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...
- [转] 关于linux下通过shell命令(自动)修改用户密码
关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...
- Python.resource-for-python-from-internet
1. pyvideo Python related video indexed so you can find it. http://pyvideo.org/ 2. 6 Useful Python L ...