Microsoft Mole原理及常见问题整理



MolesMoq(Rhino.Mocks)比较

作用范围

  1. MoqRhino.Mocks这类的Mock是对InterfaceAbstractClassMock

  2. MolesMock整个CLR(Common Language Runtime),破除MoqMock套件的限制,不仅可以对InterfaceAbstractClassMock,还可以对Static MethodMock,如DateTime.NowFile.OpenStatic Method,使原本在开发时不用为了方便测试而过度设计

原理

  1. MoqRhino Mocks的底层都是使用CastleDynamicProxy,来动态产生Class。所以它才只能对InterfaceAbstract 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 TypesMole Types

image_3.png

Moles常见问题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值