VS2012下使用Moq进行单元测试

     单元测试虽然是个很老的东西了,但平时写代码一般都不写测试,因为VS调试完全可以满足了,所以一直也就没有用过,刚好在《Pro.ASP.NET.MVC.3.Framework》中看到了Moq这个东西,于是就把vs自带的单元测试和也研究了一下。好吧,我们现在就开始吧。

     新建MVC3项目如下:

VS2012下使用Moq进行单元测试_第1张图片

然后右键 “解决方案--新建项目--测试”:

VS2012下使用Moq进行单元测试_第2张图片

为了与Domain保持一致,所以建完后如下:

VS2012下使用Moq进行单元测试_第3张图片

测试结果如下:

VS2012下使用Moq进行单元测试_第4张图片

Person:

public class Person
    {
        public string ID { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public string Job { get; set; }
  }
View Code

IPersonProvider:

public interface IPersonProvider
  {
  
       Person GetPersonById(string id);

       bool RemovePerson(string id);

  }
View Code

PersonProviderTest: 

[TestMethod]
        public void GetPersonByIdTest() {

            //创建MOCK对象
            var mock = new Mock<IPersonProvider>();

            //设置MOCK调用行为
            mock.Setup(foo=>foo.GetPersonById("1")).Returns(new Person());

            //MOCK调用方法
            mock.Object.GetPersonById("1");

            Assert.AreNotSame(new Person(), mock.Object.GetPersonById("1"));


            var mock1 = new Mock<IPersonProvider>();

            mock1.Setup(foo => foo.GetPersonById(It.IsAny<string>())).Returns(new Person());
            Assert.AreNotSame(new Person(), mock1.Object.GetPersonById("aaa"));
        }

         [TestMethod]
        public void RemovePersonTest()
        {

            var mock = new Mock<IPersonProvider>();

            mock
            .Setup(foo => foo.RemovePerson(It.Is<string>(s=>s=="1"||s=="2")))
            .Returns(true);

            Assert.AreEqual(true,mock.Object.RemovePerson("1"));
      }
View Code

以上是在vs2012下作的测试,当然在vs2010下会有小许不同,vs2010在方法上是通过右键创建单元测试,而vs2012单独拿了出来放在新建项目中,vs2010要一个一个方法的进行测试,而vs2012可以一次全部运行测试,并且还可以设置 编译后自动运行测试,这是2012的亮点。当然,这篇文章只是对VS2012和MOQ做了一个简单的介绍而已,您还可以通过以下链接来加深对Moq的理解

(1)http://www.cnblogs.com/techborther/archive/2012/01/10/2317998.html

(2)http://blog.miniasp.com/post/2010/09/16/ASPNET-MVC-Unit-Testing-Part-03-Using-Mock-moq.aspx

(3)https://code.google.com/p/moq/wiki/QuickStart

 

 

你可能感兴趣的:(单元测试)