zoukankan      html  css  js  c++  java
  • 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
                }
            }
        }
    View Code

    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));
            }
    
    
    
    
    
    
        }
  • 相关阅读:
    APP性能之终端兼容优化分享
    Java反射机制
    语音编码的WAVE文件头格式剖析
    【原创】ASP.NET MVC3开发中遇到问题以及解决方法
    linux常用命令(基础)
    vue中粘贴板clipboard的使用方法
    解决部署zabbix中zabbixagent的状态为灰色现象
    IAR Embedded Workbench for ARM: Porting code from V4 to V5 ( for stm32)
    MSDN帮助文档 "无法显示该网页" 的问题解决方案(转)
    二叉排序树求每个结点平衡因子程序
  • 原文地址:https://www.cnblogs.com/hope-help/p/4104062.html
Copyright © 2011-2022 走看看