本文参考

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练习的更多相关文章

  1. Moq基础

    一.概念 Moq是利用诸如Linq表达式树和Lambda表达式等·NET 3.5的特性,为·NET设计和开发的Mocking库.Mock字面意思即模拟,模拟对象的行为已达到欺骗目标(待测试对象)的效果 ...

  2. 单元测试与Moq

    这个篇幅里面,记录单元测试与Moq模拟包的知识点. 单元测试 每一个模块,都应该有对应的单元测试.单元测试可以保证你的代码准确性,大大减少出现BUG的几率.一个好的单元测试,也是重构代码必不可少的部分 ...

  3. moq 的常用使用方法

    测试方法                             Console.WriteLine(mock.Object.GetCountThing()); 匹配参数   mock.Setup(x ...

  4. 单元测试中使用Moq对EF的DbSet进行mock

    刚用上Moq,就用它解决了一个IUnitOfWork的mock问题,在这篇博文中记录一下. 开发场景 Application服务层BlogCategoryService的实现代码如下: public ...

  5. 【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)

     作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 3.Visual Studio 的单元测试 有很多.NET单元测试包,其中很多是开源和免费的.本 ...

  6. 【Pro ASP.NET MVC 3 Framework】.学习笔记.4.MVC的主要工具-使用Moq

    在之前的例子中,我们创建了FakeRepository类来支持我们的测试.但是我们还没有解释如何穿件一个真实的repository实现,我们需要一个替代品.一旦我们有一个真的实现,我们可能不会再用它, ...

  7. Moq的使用

    参考资料: 1. http://www.codeproject.com/Tips/729646/TDD-using-MOQ 2. https://github.com/Moq/moq4/wiki/Qu ...

  8. 使用Ninject+Moq在单元测试中抽象数据访问层

    一.测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑     二.步骤如下 ...

  9. 【PRO ASP.NE MVC4 学习札记】使用Moq辅助进行单元测试

    清楚问题所在: 先开个头,当我们对A进行单元测试时,可能会发现A的实现必须要依赖B.这时,我们在写单元测试时,就必须先创建B的实例,然后把B传给A再建立A的实例进行测试. 这样就会出现一些问题: 1. ...

  10. NUnit+mock+moq单元测试

    [TestFixture] public class InstantBatchBuyTest { private string _mallAbc; private string _itemCode; ...

随机推荐

  1. nginx配置的记录

    基本使用 语法规则: location [=|~|~*|^~] /uri/ { - } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url ...

  2. java并发知识点

    前言 先列出java并发涉及的知识点,后面再慢慢补. java并发 1 常见概念 进程/线程 进程:程序执行的实体,操作系统资源调度资源分配的基本单元 线程:程序执行的最小单元,拥有独立的堆栈和局部变 ...

  3. Java字符串定义及常用方法

    String.StringBuffer和StringBuilder   String修饰的是不可变的字符串,而StringBuffer和StringBuilder类的对象是可以被修改的.   Stri ...

  4. Python 数据结构理解分享

    摘要:分享学习Python数据结构的一些理解,主要包含序列(如列表和元组),映射(如字典)以及集合3中基本的数据结构,以及可变和不可变数据类型. Python 中的数据结构是根据某种方式将数据元素组合 ...

  5. Java常用函数式接口--Supplier接口使用案例

    使用案例:

  6. 利用 nodejs 解析 m3u8 格式文件,并下 ts 合并为 mp4

    利用 nodejs 解析 m3u8 格式文件,并下 ts 合并为 mp4 以前看视频的时候,直接找到 video标签,查看视频地址,然后下载下来.. 后来发现,好多 video 标签打开元素审查,如下 ...

  7. 怎样修改vim的缩进

    默认vim的tab缩进是八个空格, 太长了, 需要改短一点. 第一步: 找到vimrc文件所在位置 # find / -name vimrc 第二步: 找到以后用vim打开vimrc文件并增加下面两行 ...

  8. springboot接收date类型参数

    springboot接收日期类型参数,实现自动转换. 1. 当请求类型为json,date类型字段为 json 字段时,可以使用如下两种方法 1.1. 当前参数加两个注解(有些文章说接收只需要加 @D ...

  9. swift 有哪些学习资源

    Swift有哪些优秀的学习资源呢? 首先要推荐的当然是官方的资料了. 这个地址里放的是苹果官方为开发者提供的Swfit学习资源:https://developer.apple.com/swift/re ...

  10. 苹果appstore应用名下面的开发者名称填写或修改

    最近上架不小心遇到一个问题,开发者名称写错了,放假前大意了,记录一下修改过程,希望碰到同样问题的伙伴不要要着急,下面的内容可能帮你哦. 我们应用的之前的开发者名称是个人的,之前没注意这个问题,以后想注 ...