Microsoft Mole原理及常见问题整理
2016-06-15 16:18
447 查看
而Moles是Mock整个CLR(Common Language Runtime),破除Moq等Mock套件的限制,不仅可以对Interface或AbstractClass做Mock,还可以对Static Method来Mock,如DateTime.Now或File.Open等Static Method,使原本在开发时不用为了方便测试而过度设计
Moles则是在CLR上在建立一个自己的Runtime,测试时是在MoleRuntime上执行,所以原本是直接呼叫如DateTime.Now,改为呼叫Mock的程序。
手动注入
检查有无Mock实现
有值时使用Mock Delegate
无值时使用CLR
Moles的最新版本为Microsoft Fakes,但仅适用于Visual Studio 2013及以上版本。
Moles或Fakes不要与Moq等其它单元测试模拟框架混用,由于实现机制不同,很容易造成编译问题。
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等其它单元测试模拟框架混用,由于实现机制不同,很容易造成编译问题。
相关文章推荐
- Robotium
- 浅谈SQL语句优化经验
- 发博客字体,字号,颜色设置
- 郑青松是真的国学起名大师吗?看记者怎么说
- 欢迎使用CSDN-markdown编辑器
- mysql 查询表注释/字段注释
- javascript笔记
- 【java基础】filter拦截器
- db2创建32UUID
- JAVA String 工具类
- css3中webkit-box的用法
- Hadoop 从URL中读取数据
- 多点加锁实现负载均衡机制
- Java线程的5种状态及切换
- Android启动屏全屏显示
- HTML中src和href的区别
- 第一个 Python 程序
- 进程线程调度
- HTML5 WebSocket DEMO示例
- 伪分布式安装hadoop