本文参考
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("1", "Wendy", "Whiner"); private Person secondPerson = new Person("2", "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(2, 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()[0]; Assert.AreEqual("Adams", p.LastName); } [Test] [Category("Mock")] public void TestGetSinglePersonWithValidId() { mo.Setup(m => m.GetPersonById(It.Is<string>(s => s == "1"))) .Returns(onePerson); PersonService service = new PersonService(mo.Object); var p = service.GetPerson("1"); Assert.IsNotNull(p); Assert.AreEqual(p.Id, "1"); } [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)); } }