VS2012下使用Moq進行單元測試


     單元測試雖然是個很老的東西了,但平時寫代碼一般都不寫測試,因為VS調試完全可以滿足了,所以一直也就沒有用過,剛好在《Pro.ASP.NET.MVC.3.Framework》中看到了Moq這個東西,於是就把vs自帶的單元測試和也研究了一下。好吧,我們現在就開始吧。

     新建MVC3項目如下:

然后右鍵 “解決方案--新建項目--測試”:

為了與Domain保持一致,所以建完后如下:

測試結果如下:

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM