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等其它单元测试模拟框架混用,由于实现机制不同,很容易造成编译问题。


最新文章

  1. 码代码新神器-Github Atom
  2. VS+VAssistX自动添加注释
  3. 【GoLang】golang 中可变参数的 定义、传递 示例
  4. 寻找研究基于NS2研究覆盖网络的小伙伴:)
  5. WPF调用office2010的ppt出错
  6. (medium)LeetCode 264.Ugly Number II
  7. 关于Flash Builder
  8. Docker Machine
  9. 总结下java经常犯的错误
  10. jquery 的基础知识,以及和Javascript的区别
  11. golang 数组反转
  12. MySQL Block Nested Loop and Batched Key Access Joins(块嵌套循环和批量Key访问连接)
  13. pandas shift
  14. codeforces620A
  15. masscan
  16. kbmmw 5.02发布
  17. 一篇linux的通讯文章
  18. Web服务端开发需要考虑的问题
  19. [UE4]射中机器人
  20. 并发库应用之三 & 线程池与定时器应用

热门文章

  1. ajax跨域jsonp
  2. android瀑布流效果(仿蘑菇街)
  3. HTML5地理位置概述和地理位置对象的详解
  4. java 集合(Set2)
  5. 例题:计算运费。c#语言基础,比较简单。看代码输入格式和方法。同样方法可以做一个 出租车打车的程序
  6. 记一次基于Unity的Profiler性能分析
  7. 淘宝初始化css代码
  8. 谈谈JPA-01-概述
  9. springMVC 验证器
  10. 在CentOS 7 MySQL / MariaDB