zoukankan      html  css  js  c++  java
  • Moq测试基础说谈(一)——简介,下载

    Moq,就是Mock you。读音可以读成Mock~you。是Mock框架的一种。用于测试中的Mock测试。Mock是模拟的意思。Mock是模拟对象的一种技术。

    它可以用于以下情况(引用):

    ----- 真实对象具有不可确定的行为(产生不可预测的结果,如股票的行情)

    ----- 真实对象很难被创建(比如具体的web容器)

    ----- 真实对象的某些行为很难触发(比如网络错误)

    ----- 真实情况令程序的运行速度很慢

    ----- 真实对象有用户界面

    ----- 测试需要询问真实对象它是如何被调用的(比如测试可能需要验证某个回调函数是否被调用了)

    ----- 真实对象实际上并不存在(当需要和其他开发小组,或者新的硬件系统打交道的时候,这是一个普遍的问题)

     

    举个明了的例子:在开发一套BS网店系统时,想集中精力开发业务逻辑部分,而不想在数据层上花费太多时间,这时,可以通过Mock对象来模拟数据层,而不必去为数据连接,CRUDMapping等等去做太多的事,而又可以使业务测试可以进行下去。

     

    下载地址:

    http://code.google.com/p/moq/

    这里有一些文档说明。

     

    可以模拟接口和存在的类。在模拟类时有一些限制。类不能是密封的。方法要加上虚修饰符。不能模拟静态方法(可以通过适配器模式来模拟静态方法)。

    下边是一个小例子

    准备工作:

    public interface ITaxCalculator

    {

    decimal GetTax(decimal rawPrice);

    }

     

    public class Product

    {

    public int ID { get; set; }

    public String Name { get; set; }

    public decimal RawPrice { get; set; }

     

    public decimal GetPriceWithTax(ITaxCalculator calculator)

    {

    return calculator.GetTax(RawPrice) + RawPrice;

    }

    }

     

    测试

    public void TestTax()

    {

        Product myProduct = new Product { ID = 1, Name = "TV", RawPrice = 25.0M };

        Mock<ITaxCalculator> fakeTaxCalculator = new Mock<ITaxCalculator>();

        fakeTaxCalculator.Setup(tax => tax.GetTax(25.0M)).Returns(5.0M);

     

        decimal calculatedTax = myProduct.GetPriceWithTax(fakeTaxCalculator.Object);

        fakeTaxCalculator.Verify(tax => tax.GetTax(25.0M));

     

        Assert.AreEqual(calculatedTax, 30.0M); 

    }

     

    其中:

    Mock<ITaxCalculator> fakeTaxCalculator = new Mock<ITaxCalculator>();

    fakeTaxCalculator.Setup(tax => tax.GetTax(25.0M)).Returns(5.0M);

    这部分就是建立Mock对象。

    这里其实对GetTax方法进行了模拟:

    GetTax(25.0M){return 5.0M;}

     

    当调用myProduct.GetPriceWithTax(fakeTaxCalculator.Object)时,那么,

    return calculator.GetTax(RawPrice) + RawPrice;

    现在calculator对象已经进行了模拟,GetPriceWithTax返回GetTax的值+RawPrice的值。

    此时的ProductRawPrice的值为25.0M,从这个值可以得到tax.GetTax(25.0M)的值是5.0M。而25.0M+5.0M的值是30.0M。所以返回的值是30.0M。这个断言是正确的。

     

     

  • 相关阅读:
    sklearn中决策树算法DesiciontTreeClassifier()调用以及sklearn自带的数据包sklearn.datasets.load_iris()的应用
    python 中feedParser
    Python中解码decode()与编码encode()与错误处理UnicodeDecodeError: 'gbk' codec can't decode byte 0xab
    Python中的排序方法sort(),sorted(),argsort()等
    Python 关于数组矩阵变换函数numpy.nonzero(),numpy.multiply()用法
    Python中where()函数的用法
    矩阵乘法np.dot()及np.multiply()以及*
    Python打开文件open()的注意事项
    给 Chrome浏览器 添加 Javascript小书签,查看当前页面全部加载的javascript文件及代码片段
    pycharm快捷键及中文说明【使用翻译工具一条一条翻译】
  • 原文地址:https://www.cnblogs.com/jams742003/p/1676215.html
Copyright © 2011-2022 走看看