Asp.net mvc +Ajax +Extjs+NHibernate 系列之單元測試

來源:互聯網
上載者:User
概述使用單元測試架構,Nunit。包括對controller的測試,以及moq架構的使用。 詳解1,資料庫層Service的單元測試

 

引入:using NUnit.Framework;

代碼    [TestFixture]
    public class SystemConfigServiceTest
    {

        [Test]
        public void GetByIdTest()
        {
            SystemConfig configExcept = new SystemConfig();
            configExcept.PkId = 78;
            SystemConfig configActual = new SystemConfigService().GetById(78);
            Assert.AreEqual(configExcept.PkId, configActual.PkId,"插敘編號為78的,如果測試不通過,請檢查");
        }
    }

 

 類的特性標記為 TestFixture,要測試的方法特性標記為:Test,初始化測試對象,出入參數,判斷傳回值與你預期的值的比較。

這種測試是比較簡單的單元測試。

2,Controller的單元測試

Moq 的介紹比較多http://www.cnblogs.com/haoliansheng/archive/2010/04/27/1721816.html

 

代碼        [Test]
        public void IndexFirstTest()
        {
            SystemConfigController controller = new SystemConfigController();

            var httpContext = new Mock<HttpContextBase>();
            var request = new Mock<HttpRequestBase>();
            NameValueCollection queryString = new NameValueCollection();
            queryString.Add("currentIndex", "1");
            request.Setup(r => r.QueryString).Returns(queryString);
            httpContext.Setup(ht => ht.Request).Returns(request.Object);

            ControllerContext controllerContext = new ControllerContext();
            controllerContext.HttpContext = httpContext.Object;

            controller.ControllerContext = controllerContext;

            //當前為19條記錄,總共有4頁

            //第一頁為5條記錄
            //Act
            ViewResult result1 = controller.Index(1, null) as ViewResult;

            //Assert
            ViewDataDictionary viewData1 = result1.ViewData;
            List<SystemConfig> model1 = viewData1.Model as List<SystemConfig>;
            //Assert.AreEqual(1, viewData1["CurrendIndex"],"單元測試的當前頁為 ,第一頁");
            Assert.AreEqual(5, model1.Count, "第一頁的長度應該為5,錯誤有可能是沒有資料");
        }

 

 一個測試方法,

            var httpContext = new Mock<HttpContextBase>();

            var request = new Mock<HttpRequestBase>();

初始化兩個對象,moq其實就是類比兩個對象。用他們來進行內容相關的操作。

request.Setup(r => r.QueryString).Returns(queryString);初始化的過程

  //第一頁為5條記錄

            //Act

            ViewResult result1 = controller.Index(1, null) as ViewResult;

然後controller直接執行方法就可以了,在判斷執行後的結果與預期的。

代碼        [Test]
        public void Index0Test()
        {
            SystemConfigController controller = new SystemConfigController();

            var httpContext = new Mock<HttpContextBase>();
            var request = new Mock<HttpRequestBase>();
            NameValueCollection queryString = new NameValueCollection();
            queryString.Add("currentIndex", "0");
            request.Setup(r => r.QueryString).Returns(queryString);
            httpContext.Setup(ht => ht.Request).Returns(request.Object);

            ControllerContext controllerContext = new ControllerContext();
            controllerContext.HttpContext = httpContext.Object;

            controller.ControllerContext = controllerContext;

            //第0頁五條資料
            ViewResult result3 = controller.Index(0, null) as ViewResult;

            ViewDataDictionary viewData3 = result3.ViewData;
            List<SystemConfig> model3 = viewData3.Model as List<SystemConfig>;
            //Assert.AreEqual(0, viewData3["CurrendIndex"]);
            Assert.AreEqual(5, model3.Count);
        }

 

技術要點

controller測試,moq架構的使用。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.