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; ...
随机推荐
- IDEA 的操作与使用
idea 设置syso File –> Setting –> Editor –> Live Templates debug 调试: F7 在 Debug 模式下,进入下一步,如果当前 ...
- sqlserve 数据库8G log文件也有10来g 按日期删除 方法
数据库存了几年的数据没有维护过,数据庞大,日志文件也不小,如何清理不需要的数据呢 首先考虑的肯定是某个日期之前的数据清除掉 delete from 表名 where cast(字段名 as datet ...
- todo---callback
todo---callback https://blog.csdn.net/u010158267/article/details/51426963/
- 剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。
1 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用 ...
- 15. Scala并发编程模型Akka
15.1 Akka介绍 1) Akka是Java虚拟机JVM平台上构建高并发.分布式和容错应用的工具包和运行时,可以理解成Akka是编写并发程序的框架 2) Akka用Scala语言写成,同时提供了S ...
- JAVA基础学习_命名规范和注释
一.命名规范 1. 项目名全部小写 2. 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词,包名统一使用单数形式.如果类名有复数含义,类名可以使用复数形式. 实际应用中: 各层命名规约: ...
- DataSource配置
一.JDBC Jar依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
- List、dictionary、hashtable、ArrayList集合
集合的引用命名空间在 system.Collections下 1.为什么引入集合 因为数组长度是固定的,为了建立一个动态的"数组",所以引入了集合. 2.为什么引入ArrayLis ...
- C#,WinForm文本框录入内容判断
|| e.KeyChar > ) && (e.KeyChar != ) && (e.KeyChar != ) && (e.KeyChar != ) ...
- 后端参数校验器v1.0(调用一个方法校验所有参数并得到校验结果,且包括错误原因)
一:介绍 在写后端时,面对多个参数,比如手机号码.密码等我们常常需要写验证逻辑,当需要验证的参数较多的时候我们会需要写很多的判断语句,这就造成了大量的代码冗余.因此我开发了一套参数验证器,只需要调用参 ...