Moq练习
本文参考
http://www.cnblogs.com/haogj/archive/2011/06/24/2088788.html
Moq适合于TDD的项目,小项目初期应该不太适合使用,有些浪费时间了!
NuGet 分别添加 NUnit 和 Moq
install-package nunit -project 测试项目名称
install-package moq -project 测试项目名称
public class Person
{
public string Id;
public string FirstName;
public string LastName;
public Person(string newId, string fn, string ln)
{
Id = newId;
FirstName = fn;
LastName = ln;
}
} public interface IPersonRepository
{
List<Person> GetPeople();
Person GetPersonById(string id);
} public class PersonService
{
private IPersonRepository personRepos;
public PersonService(IPersonRepository repos)
{
personRepos = repos;
}
public List<Person> GetAllPeople()
{
return personRepos.GetPeople();
}
public List<Person> GetAllPeopleSorted()
{
List<Person> people = personRepos.GetPeople();
people.Sort(delegate(Person lhp, Person rhp)
{
return lhp.LastName.CompareTo(rhp.LastName);
});
return people;
}
public Person GetPerson(string id)
{
try
{
return personRepos.GetPersonById(id);
}
catch (ArgumentException)
{
return null; // no person with that id was found
}
}
}
Moq
[TestFixture]
public class NUnitTest
{ private Mock<IPersonRepository> mo = new Mock<IPersonRepository>(); private Person onePerson = new Person("", "Wendy", "Whiner");
private Person secondPerson = new Person("", "Aaron", "Adams");
private List<Person> peopleList; /// <summary>
/// 填充基础数据
/// </summary>
[SetUp]//每个测试方法被调用之前执行
[Category("Mock")]
public void Init()
{
peopleList = new List<Person>();
peopleList.Add(onePerson);
peopleList.Add(secondPerson); } [Test]
[Category("Mock")]
public void TestGetAllPeople()
{
//模拟使用接口方法及返还数据
mo.Setup(m => m.GetPeople()).Returns(peopleList); PersonService service = new PersonService(mo.Object); Assert.AreEqual(, service.GetAllPeople().Count);
} [Test]
[Category("Mock")]
public void TestGetAllPeopleSorted()
{
mo.Setup(m => m.GetPeople()).Returns(peopleList); PersonService service = new PersonService(mo.Object); var p = service.GetAllPeopleSorted()[]; Assert.AreEqual("Adams", p.LastName);
} [Test]
[Category("Mock")]
public void TestGetSinglePersonWithValidId()
{
mo.Setup(m => m.GetPersonById(It.Is<string>(s => s == "")))
.Returns(onePerson); PersonService service = new PersonService(mo.Object); var p = service.GetPerson(""); Assert.IsNotNull(p);
Assert.AreEqual(p.Id, "");
} [Test]
[Category("Mock")]
public void TestGetSinglePersonWithInalidId()
{
mo.Setup(m => m.GetPersonById(It.IsAny<string>())); PersonService service = new PersonService(mo.Object);
Assert.IsNull(service.GetPerson(null));
} }
Moq练习的更多相关文章
- Moq基础
一.概念 Moq是利用诸如Linq表达式树和Lambda表达式等·NET 3.5的特性,为·NET设计和开发的Mocking库.Mock字面意思即模拟,模拟对象的行为已达到欺骗目标(待测试对象)的效果 ...
- 单元测试与Moq
这个篇幅里面,记录单元测试与Moq模拟包的知识点. 单元测试 每一个模块,都应该有对应的单元测试.单元测试可以保证你的代码准确性,大大减少出现BUG的几率.一个好的单元测试,也是重构代码必不可少的部分 ...
- moq 的常用使用方法
测试方法 Console.WriteLine(mock.Object.GetCountThing()); 匹配参数 mock.Setup(x ...
- 单元测试中使用Moq对EF的DbSet进行mock
刚用上Moq,就用它解决了一个IUnitOfWork的mock问题,在这篇博文中记录一下. 开发场景 Application服务层BlogCategoryService的实现代码如下: public ...
- 【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> 3.Visual Studio 的单元测试 有很多.NET单元测试包,其中很多是开源和免费的.本 ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.4.MVC的主要工具-使用Moq
在之前的例子中,我们创建了FakeRepository类来支持我们的测试.但是我们还没有解释如何穿件一个真实的repository实现,我们需要一个替代品.一旦我们有一个真的实现,我们可能不会再用它, ...
- Moq的使用
参考资料: 1. http://www.codeproject.com/Tips/729646/TDD-using-MOQ 2. https://github.com/Moq/moq4/wiki/Qu ...
- 使用Ninject+Moq在单元测试中抽象数据访问层
一.测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑 二.步骤如下 ...
- 【PRO ASP.NE MVC4 学习札记】使用Moq辅助进行单元测试
清楚问题所在: 先开个头,当我们对A进行单元测试时,可能会发现A的实现必须要依赖B.这时,我们在写单元测试时,就必须先创建B的实例,然后把B传给A再建立A的实例进行测试. 这样就会出现一些问题: 1. ...
- NUnit+mock+moq单元测试
[TestFixture] public class InstantBatchBuyTest { private string _mallAbc; private string _itemCode; ...
随机推荐
- lnmp二级域名配置相关
阿里云那域名解析那有误读 我在偏远的电信网选择中国联通解析死活解析不出来 以上这么配置就对了....选择默认.瞬间解析出来.... 出于对nginx 配置不够熟悉 后来一点点理出来. 不带www 也正 ...
- Word表格和文本自由互换
未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)
- Swing的基本操作
package GUI_experience; import java.awt.*; import java.awt.Container; import java.awt.FlowLayout; im ...
- dotnet Core 图片验证码
9102年了,.NET Core 2.x已经稳定,但是还是有很多人搞不定.NET Core的图片验证码. 下面说重点 1.引用Nuget包:System.Drawing.Common 2.像NET F ...
- 湖北校园网PC端拨号算法逆向
湖北校园网PC端拨号算法逆向 前言 上一文 PPPoE中间人拦截以及校园网突破漫谈我们谈到使用 PPPoE 拦截来获取真实的账号密码. 在这个的基础上,我对我们湖北的客户端进行了逆向,得到了拨号加密算 ...
- Echarts设置y轴值间隔 以及设置 barWidth : 30,//柱图宽度
需求:如图,y轴之间的距离太小,这样就太过于拥挤了,现在要修改echarts里面的属性,设置y轴值间隔让图表看上去舒服一些. 其实很多问题,真的只是因为自己没有好好的看文档,很多文档上面都写的 ...
- X64驱动:内核操作进线程/模块
注意:下面的所有案例必须使用.C结尾的文件,且必须在链接选项中加入 /INTEGRITYCHECK 选项,否则编译根本无法通过(整合修正,Win10可编译,须在测试模式下进行),内核代码相对固定,如果 ...
- 修改mysql远程数据库链接密码(转)
原文:https://blog.csdn.net/jianjiao7869/article/details/81029171 原来root用户有两个,一个只允许localhost登陆,一个可运行所有用 ...
- C/C++ cmake example
学习 Golang,有时需要 Cgo,所以需要学习 C.C++. 语言入门: https://item.jd.com/12580612.html https://item.jd.com/2832653 ...
- Xcode如何快速定位crash的位置?
最近发现经常有人程序崩掉后不知道怎么定位crash的位置 如何快速定位crash的位置? 选择右箭头 选择Add Exception Breakpoint 这样如果你的app再crash就会自动定位到 ...