Moq练习
阅读原文时间:2023年07月11日阅读:1

本文参考

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));  
    }

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章