本文参考
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));
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章