[UnitTest03]-Moq
来源:互联网 发布:农产品追溯系统源码 编辑:程序博客网 时间:2024/06/05 09:44
Moq是利用诸如Linq表达式树和Lambda表达式等·NET 3.5的特性,为·NET设计和开发的Mocking库。Mocking以一种自然的方式与现有单元测试进行集成,使它更加简单、直观,以避免开发人员被迫重写测试或学习需要大量录制/播放的Mock框架。Moq的目标就是为了帮助那些编写测试代码,但却不使用Mocking框架的开发人员。Moq的设计原则就是以极低的门槛来获取良好的重构能力。
Moq之所以出现是因为在实际的单元测试过程中,我们会遇到以下的一些情形:
1)数据库交互的单元测试。相对规范的软件开发流程是根据详细需求写单元测试,这时候很有可能数据库的模型尚未完成建立或者已经建立,但是测试数据并未加载,我们写单元测试,如果要真的跟数据库进行交互的话,肯定是有问题的,Moq的虚拟对象可以解决这个问题。
2)复杂的对象交互。当对象的依赖关系比较复杂时,为了构造一个目标对象需要先构造很多的其依赖的对象,这时候就需要写很多的代码,为了简化这些代码,让开发者更加专注于业务逻辑,Moq支持一个虚拟对象,虚拟对象通过依赖注入可以模拟对象的交互关系。
3)特定情形的测试。比如网络突然断开的情形下进行测试,大批量用户访问数据库等情形的测试。
下面我们就通过Moq的例子来演示下Moq用法。
接口
public interface IMoqTest
{
int Div(int x, int y);
void setValue();
}
类
public class MoqTest : IMoqTest
{
/// <summary>
/// 算术除法
/// 注:这里使用除法做演示是为了方便后面演示if...else分支的UnitTest
/// </summary>
/// <param name="x">被除数</param>
/// <param name="y">除数</param>
/// <returns>商</returns>
public int Div(int x,int y)
{
if (y == 0)
return int.MaxValue;
else
return x / y;
}
public void setValue()
{
}
}
单元测试代码如下:
[TestClass]
public class MoqExampleUnitTest
{
[TestMethod]
public void TestDiv_IfYIsNotZero()
{
int a = 8;
int b = 4;
int expected = 2;
var moqTest = new Mock<IMoqTest>();
moqTest.Setup(x => x.Div(a, b)).Returns(expected);
int actual = moqTest.Object.Div(a, b);
Assert.AreEqual(expected, actual);
}
[TestMethod]
public void TestDiv_IfYIsZero()
{
int a = 8;
int b = 0;
int expected = int.MaxValue;
var moqTest = new Mock<IMoqTest>();
moqTest.Setup(x => x.Div(a, b)).Returns(expected);
int actual = moqTest.Object.Div(a, b);
Assert.AreEqual(expected, actual);
}
[TestMethod]
public void TestSetValue()
{
var moqTest = new Mock<IMoqTest>();
moqTest.Setup(x => x.setValue());
moqTest.Object.setValue();
moqTest.Verify(x => x.setValue());
}
}
这里的Moq还是很基础的,下章节会介绍更为深入的Moq使用。
- [UnitTest03]-Moq
- Moq测试
- Moq Quickstart
- Moq基础教程
- Moq & RhinoMocks
- Moq/moq4
- Moq 3.0已发布
- 单元测试之moq
- Moq测试一般类
- Moq插件的用法
- MOQ TIP2:匹配参数
- Moq用例集合
- Moq 单元测试的意义
- 单元测试—Moq框架
- Moq mock测试相关
- MOQ测试方法大全
- moq单元测试方法大全
- 使用Moq实现单元测试
- wordpress面向搜索引擎优化
- Lucene 的PerFieldAnalyzerWrapper
- mac 10.9 itunes 同步iphone5(越狱7.1)
- Collection框架
- spring mvc 批量上传+文件上传
- [UnitTest03]-Moq
- java 集合框架JCF
- Shell - seq 的一般用途和它相若的命令
- 内存分配(堆、栈、BSS、代码段、数据段)
- win7怎样开启loopback接口(环回网卡)
- ios-使用树形结构导航模式
- 几个主流TCP/IP协议栈介绍
- MG网络技术运营
- 碰撞检测