Moq测试基础说谈(一)——简介,下载

简介: Moq,就是Mock you。读音可以读成Mock~you。是Mock框架的一种。用于测试中的Mock测试。Mock是模拟的意思。Mock是模拟对象的一种技术。 它可以用于以下情况(引用): ----- 真实对象具有不可确定的行为(产生不可预测的结果,如股票的行情) ----- 真实对象很难被...

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。这个断言是正确的。

 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
5月前
|
缓存 测试技术 Linux
软件测试/测试开发|如何解决pip下载速度慢的问题
软件测试/测试开发|如何解决pip下载速度慢的问题
102 0
|
5月前
|
XML 测试技术 数据格式
Python性能测试Locust简介
Python性能测试Locust简介
Python性能测试Locust简介
|
5月前
|
XML Java 测试技术
『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略
『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略
201 3
|
5月前
|
XML 测试技术 开发工具
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
93 4
|
4月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
208 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
5月前
|
SQL 关系型数据库 MySQL
【Seata1.5.2 下载 & 配置 & 整合 & 踩坑 & 测试】—— 含各种踩坑记录(详细版)(上)
【Seata1.5.2 下载 & 配置 & 整合 & 踩坑 & 测试】—— 含各种踩坑记录(详细版)
202 0
|
3月前
Postman 测试上传与下载
Postman 测试上传与下载
42 0
|
4月前
|
安全 测试技术 数据库
简介性能测试
简介性能测试
简介性能测试
|
4月前
|
测试技术
HTTP性能测试工具Siege 简介
HTTP性能测试工具Siege 简介
|
5月前
|
Linux 网络安全 开发工具
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
67 0

热门文章

最新文章