Microsoft Mole原理及常见问题整理
Moles与Moq(Rhino.Mocks)比较
作用范围
Moq与Rhino.Mocks这类的Mock是对Interface或AbstractClass做Mock,
而Moles是Mock整个CLR(Common Language Runtime),破除Moq等Mock套件的限制,不仅可以对Interface或AbstractClass做Mock,还可以对Static Method来Mock,如DateTime.Now或File.Open等Static Method,使原本在开发时不用为了方便测试而过度设计
原理
Moq与Rhino Mocks的底层都是使用CastleDynamicProxy,来动态产生Class。所以它才只能对Interface或Abstract Class,这类可继承的类别,如对Interface就是动态产生一个实作Interface所有成员的Class,在用Setup来指定成员的内容或回传值,多半会搭配IoC,让程序在调用其他类别时,改为调用Mock的程序。
Moles则是在CLR上在建立一个自己的Runtime,测试时是在MoleRuntime上执行,所以原本是直接呼叫如DateTime.Now,改为呼叫Mock的程序。
Mole的运行方式
静态(接口和虚方法)
自动生成模拟类,继承接口或实现类
手动注入
动态(其它)
启用上下文(MoleRuntime 替换CLR -ComonLinguageRuntime)
检查有无Mock实现
有值时使用Mock Delegate
无值时使用CLR
HostType的作用
在TestMethod上增加[HostType("Moles")],让Visual Studio知道这一个TestMethod,是要用MoleRuntime执行
区分Stub Types与Mole Types
Moles常见问题
- Moles读取配置文件问题:这是Moles的一个Bug,安装Pex套件来代替安装单独的Moles可解决这一问题。
- Moles的最新版本为Microsoft Fakes,但仅适用于Visual Studio 2013及以上版本。
- Moles或Fakes不要与Moq等其它单元测试模拟框架混用,由于实现机制不同,很容易造成编译问题。
Microsoft Mole原理及常见问题整理的更多相关文章
- LoadRunner常见问题整理(转)
首先要感谢群友的无私分享,才能得到这篇好的学习资料,整理得太好了,所以收藏保存,方便以后学习. 一:LoadRunner常见问题整理 1.LR 脚本为空的解决方法: 1.去掉ie设置中的第三方支持取消 ...
- 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
这篇是对angularJS的一些疑点回顾,是对目前angularJS开发的各种常见问题的整理汇总.如果对文中的题目全部了然于胸,觉得对整个angular框架应该掌握的七七八八了.希望志同道合的通知补充 ...
- Maven使用常见问题整理
Maven使用常见问题整理 1.更新eclipse的classpath加入新依赖 1.在dependencyManagement里面加入包括版本在内的依赖信息,如: <dependenc ...
- [转]LoadRunner脚本录制常见问题整理
LoadRunner脚本录制常见问题整理 1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面 ...
- [转帖]kubernetes 常见问题整理
kubernetes 常见问题整理 https://www.cnblogs.com/qingfeng2010/p/10642408.html 使用kubectl 命令报错 报错: [root@k8s- ...
- 太全了!Redis主从复制原理以及常见问题总结
相信很多小伙伴都已经配置过主从复制,但是对于redis主从复制的工作流程和常见问题很多都没有深入的了解.这次给大家整理一份redis主从复制的全部知识点. 下方可视频观看,效果更佳 Redis实战精讲 ...
- LR常见问题整理
1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决. LR11 无法弹出ie浏览 ...
- HashMap实现原理及常见问题
1.简介 HashMap是基于哈希表的Map接口的实现,用来存放键值对(Entry<Key,Value>),并提供可选的映射操作.使用put(Key,Value)存储对象到HashMap中 ...
- Git 使用心得 & 常见问题整理
开源Linux 回复"读书",挑选书籍资料~ Git 流程图 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...
随机推荐
- C++——string类和标准模板库
一.string类 1.构造函数 string实际上是basic_string<char>的一个typedef,同时省略了与内存管理相关的参数.size_type是一个依赖于实现的整型,是 ...
- Redhat 6.4_联网 yum 配置
步骤简述----------------------------------------------------------------- 1. 准备软件包 下载第三步的软件包即可.由于是联网yum配 ...
- OpneCV 二值图像区域处理
//--------------------------------------[程序说明]------------------------------------------- // 在图像处理中总 ...
- 图片(img标签)的onerror事件
打开网页时提示 Stack overflow at line: 0.我做了截图如下: 经过分析,发现网页中存在类似如下的代码: <img src="pic.gif" oner ...
- webpages框架中使用Html.TextArea()在前台显示多行信息时,如何进行大小、样式的设置
环境:vs2015 webpages框架+razor语法: 目的:服务器进行数据更新操作后,在前台显示更新的相关信息: 后台代码:将更新条数等相关信息存储在一个变量中: @{ var serverIn ...
- jq实现全选非全选
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Django数据库设置
设置数据库,创建您的第一个模型,得到一个简单介绍 Django的自动生成管理网站. 数据库设置 现在,打开 mysite / settings.py . 这是一个普通的Python模块 模块级变量代表 ...
- pvresize - Unix, Linux Command
NAME pvresize - resize a disk or partition in use by LVM2 SYNOPSIS pvresize [-d|--debug] [-h|--help] ...
- [JavaScript] 函数同名问题
存在同名函数时,最后的函数会覆盖掉以前的同名函数. var x = 1, y = z = 0; function add(n) { return n = n + 1; } y = add(x); fu ...
- plot a critical difference diagram , MATLAB code
plot a critical difference diagram , MATLAB code 建立criticaldifference函数 function cd = criticaldiffer ...