• Microsoft Mole原理及常见问题整理


    

    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

    image_3.png

    Moles常见问题

    1. Moles读取配置文件问题:这是Moles的一个Bug,安装Pex套件来代替安装单独的Moles可解决这一问题。
    2. Moles的最新版本为Microsoft Fakes,但仅适用于Visual Studio 2013及以上版本。
    3. Moles或Fakes不要与Moq等其它单元测试模拟框架混用,由于实现机制不同,很容易造成编译问题。
    
  • 相关阅读:
    windows无法完成格式化
    javascript数组添加元素的三种方式
    sql server将字符串类型转换为数值类型
    javascript将字符串转化成json对象的3种方法
    bootstrap table刷新表格记录
    html元素的title属性值换行
    webstorm快捷键失效问题
    设计模式之原型,学习笔记
    设计模式之封装,学习笔记
    初了解JS设计模式,学习笔记
  • 原文地址:https://www.cnblogs.com/markhe/p/5587912.html
Copyright © 2020-2023  润新知