Moles与Moq(Rhino.Mocks)比较

作用范围

  1. Moq与Rhino.Mocks这类的Mock是对Interface或AbstractClass做Mock,

  2. 而Moles是Mock整个CLR(Common Language Runtime),破除Moq等Mock套件的限制,不仅可以对Interface或AbstractClass做Mock,还可以对Static Method来Mock,如DateTime.Now或File.Open等Static Method,使原本在开发时不用为了方便测试而过度设计

原理

  1. Moq与Rhino Mocks的底层都是使用CastleDynamicProxy,来动态产生Class。所以它才只能对Interface或Abstract Class,这类可继承的类别,如对Interface就是动态产生一个实作Interface所有成员的Class,在用Setup来指定成员的内容或回传值,多半会搭配IoC,让程序在调用其他类别时,改为调用Mock的程序。

  2. Moles则是在CLR上在建立一个自己的Runtime,测试时是在MoleRuntime上执行,所以原本是直接呼叫如DateTime.Now,改为呼叫Mock的程序。

Mole的运行方式

静态(接口和虚方法)

  1. 自动生成模拟类,继承接口或实现类

  2. 手动注入

动态(其它)

  1. 启用上下文(MoleRuntime 替换CLR -ComonLinguageRuntime)

  2. 检查有无Mock实现

    1. 有值时使用Mock Delegate

    2. 无值时使用CLR

HostType的作用

在TestMethod上增加[HostType("Moles")],让Visual Studio知道这一个TestMethod,是要用MoleRuntime执行

区分Stub Types与Mole Types

Moles常见问题

  1. Moles读取配置文件问题:这是Moles的一个Bug,安装Pex套件来代替安装单独的Moles可解决这一问题。
  2. Moles的最新版本为Microsoft Fakes,但仅适用于Visual Studio 2013及以上版本。
  3. Moles或Fakes不要与Moq等其它单元测试模拟框架混用,由于实现机制不同,很容易造成编译问题。


Microsoft Mole原理及常见问题整理的更多相关文章

  1. LoadRunner常见问题整理(转)

    首先要感谢群友的无私分享,才能得到这篇好的学习资料,整理得太好了,所以收藏保存,方便以后学习. 一:LoadRunner常见问题整理 1.LR 脚本为空的解决方法: 1.去掉ie设置中的第三方支持取消 ...

  2. 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

    这篇是对angularJS的一些疑点回顾,是对目前angularJS开发的各种常见问题的整理汇总.如果对文中的题目全部了然于胸,觉得对整个angular框架应该掌握的七七八八了.希望志同道合的通知补充 ...

  3. Maven使用常见问题整理

    Maven使用常见问题整理  1.更新eclipse的classpath加入新依赖  1.在dependencyManagement里面加入包括版本在内的依赖信息,如:   <dependenc ...

  4. [转]LoadRunner脚本录制常见问题整理

    LoadRunner脚本录制常见问题整理 1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面 ...

  5. [转帖]kubernetes 常见问题整理

    kubernetes 常见问题整理 https://www.cnblogs.com/qingfeng2010/p/10642408.html 使用kubectl 命令报错 报错: [root@k8s- ...

  6. 太全了!Redis主从复制原理以及常见问题总结

    相信很多小伙伴都已经配置过主从复制,但是对于redis主从复制的工作流程和常见问题很多都没有深入的了解.这次给大家整理一份redis主从复制的全部知识点. 下方可视频观看,效果更佳 Redis实战精讲 ...

  7. LR常见问题整理

    1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决. LR11 无法弹出ie浏览 ...

  8. HashMap实现原理及常见问题

    1.简介 HashMap是基于哈希表的Map接口的实现,用来存放键值对(Entry<Key,Value>),并提供可选的映射操作.使用put(Key,Value)存储对象到HashMap中 ...

  9. Git 使用心得 & 常见问题整理

    开源Linux 回复"读书",挑选书籍资料~ Git 流程图 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...

随机推荐

  1. scala集合

    优先使用不可变集合.不可变集合适用于大多数情况,让程序易于理解和推断,因为它们是引用透明的( referentially transparent )因此缺省也是线程安全的. 使用可变集合时,明确地引用 ...

  2. Android menu 简单创建

    在android 中与menu相关的类有4个: Menu:菜单的父窗口,用于创建一个菜单,是subMenu,ContentMenu,MenuItem等的父接口:SubMenuyo用于创建子菜单,Con ...

  3. hiho1093_spfa

    题目 SPFA模板题,题目中数据可能有两个点之间有多条边直接相连,使用 unordered_map< int, unordered_map< int, int>>, 来存储图的 ...

  4. POJ水题 1298

    #include "stdafx.h" #include <iostream> #include <string> using namespace std; ...

  5. ubuntu14.04-rocketmq单机搭建

    需要环境: jdk(1.6+) git(如果clone源码,需要git,没有git直接下载gar包也行) maven3.x在安装之前确定自己已经安装了jdk:java -version 先获取reck ...

  6. form作为module name 悲剧了

    爆出很无语的错误,也怪我,没有实地的debug. 所以,module name应该是不能碰关键词类似,最好custom一点好.

  7. WebContentGenerator

    用于提供如浏览器缓存控制.是否必须有session开启.支持的请求方法类型(GET.POST等)等,该类主要有如下属性: Set<String>   supportedMethods:设置 ...

  8. Django数据库设置

    设置数据库,创建您的第一个模型,得到一个简单介绍 Django的自动生成管理网站. 数据库设置 现在,打开 mysite / settings.py . 这是一个普通的Python模块 模块级变量代表 ...

  9. Compound Interest Calculator3.0

    Compound Interest Calculator3.0 1.利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若一切顺利,过多长时间,100万元就变成200万元呢 ...

  10. linux查看是否已安装GCC及安装GCC

    输入:gcc -v;如果提示未找到命令即表示没有安装 使用:yum install gcc即可