• .NET 单元测试的利剑——模拟框架Moq(简述篇)


    .NET 单元测试的利剑——模拟框架Moq

    前言

    这篇文章是翻译文,因为通过自己参与的项目,越发觉得单元测试的重要性,特别是当跟业务数据打交道的时候的,Moq就如雪中送炭,所以想学习这个框架,就从这篇译文开始吧,顺便提升下自己英文阅读水平吧,由于英语实在不行,借助有道翻译有时候还理解不了原文的意思。凑合的看吧,下一篇介绍moq的使用demo
    原文地址:https://github.com/moq/moq4

    什么是Moq

    Moq(发音—"mock-you"或是"mock")是一个针对.net开发只用于模拟的库,它充分利用了.NET LINQ表达式树和Lambda表达式的优势,使更具有生产效率,类型安全和友好重构的可模拟的类库。并且能像模拟Class类一样模拟Interface。API非常简洁和直接,不需要太多的前面的知识或是模拟概念的经验。

    为什么?

    因为这个库是由那些没有使用过任何模拟类库的开发者创建的(或是对那些已经实现的库太过复杂而不满),代表性的他们通过手动的去写他们自己的模拟(带着或多或少的“幻想”)。在这种情况下,大多数开发者非常关注实效,遵循TDD。这是一种感觉,从其他模拟库中进入的障碍有点高,而且有更简单,更轻量,更优雅的方法是有可能的。Moq通过带着C#简洁优雅以及VB的语言特性他们统一称为LINQ,能满足所有的上面说的这些(并不只是缩略词LINQ(查询)的意思)。

    Moq被设计成为一个非常实用,直接的方式为你的测试去设置依赖。它的API设计甚至帮助初学者用户在“成功的坑”里并且能避免最常见的模拟错误。

    当它被构思出来的时候,它就是唯一一个与那些有别于普通的和不直观的(特别是针对新手)记录/回放方法的模拟库框架(这是好的)

    不使用Record/Replay也意味着将那些通常的期望转移到一个fixture设置方法是非常简单的,甚至能覆盖那些期望在特定的单元测试中。

    你可以在 kzu's blog 看到更多关于“为什么?”的细节以及一些不错的截图信息。

    下载安装

    nuget 下载安装,并可以在上面查看 api文档

    kzu's blog 上看到更多关于mock的通知。从Scott Hanselman 获得一些模拟状态的背景知识

    特征

    Moq提供下面这些特征

    • 强类型:没有字符串的期望,没有object类型的返回值或者是约束
    • 智能提示:所有的一切都完美支持VS智能感知,从设置期望值,到指定方法调用参数,返回值等等。
    • 不需要了解Record/Replay的习惯。只需要构造你的模拟,设置好并使用它,可选的验证它(你也许不做验证,当它作为存根(stubs)时,或者当你在做更传统的基于状态的测试时,通过检查对象返回的值)
    • 前三点的影响,学习曲线非常低。在大多时候,你无需阅读文档。
    • 通过简单的MockBehaviorm枚举对模拟的行为细粒度控制(Granular control)(无需模拟,存根(stub),伪造(fake),动态模拟等等)
    • 接口和类都能模拟
    • 覆盖期望:能设置默认的期望在一个fixture设置,并且根据测试需要覆盖
    • 为模拟类传递构造函数参数
    • 在模拟中截断器和触发事件
    • 能支持out/ref参数
  • 相关阅读:
    Powershell & SQL
    Powershell运行Invoke-Sqlcmd命令的先决条件
    Powershell实现Telnet Port
    Quest Active Directory
    数据库系统概述(Data Model、DBMS、DBS、RDBS、Structured Query Language)
    Oracle简介
    Downgrading an Exchange 2010 Server(Exchange降级)
    MAPISession(EventID9646-MS-ExchangeIS)
    指定运行Exchange Powershell的Server
    Linux磁盘管理命令(fdisk,mount,umount,mkfs)
  • 原文地址:https://www.cnblogs.com/ms27946/p/UnitTest-DotNet-For-Moq.html
Copyright © 2020-2023  润新知