ASP.NET MVC 使用MVC的架構,其架構本身就使應用程式更易於測試,但這並不意味著可以隨便寫出易於測試的程式。我們都知道單元測試在系統開發有著很重要的作用。
我們來寫這樣的一個程式,系統擷取某個壞男人的情人資訊,然後發送給他老婆。
1. 建一個Lover的ASP.NET MVC3項目
我們需要1個實體類,儲存男人,情人和老婆的資訊。
然後我們需要一個LoverRepository來擷取某個人的情人,這裡就想成從資料庫取資料。我們這裡先返回固定的資料
建一個HomeController, 代碼如下
建立一個Index視圖
建立一個Send 視圖
F5運行
2. 重構這個小程式。
我們可以看到如果我們想測試HomeController裡Send的這個Action,如果LoverRepository沒有開發完或者出錯,我們將無法測試。
可以看到單元測試出錯了。
那麼我們如何來隔離LoveRepository呢?我們都知道面向介面編程可以提高系統的可測試性。
開啟LoveRepository.cs, 右鍵重構為介面:
為了容易測試,我們把這個介面屬性設為公有。
這時我們再自己可以實現一個FakeRepository繼承ILoverRepository這個介面,這樣就測試通過了。
但是這樣有幾個問題:
第一就是我們暴露了HomeController的repository的屬性。
第二我們在類內部new了一個對象,假如我們這次是從資料庫中得到Lovers,下次想從檔案或者Web Service裡去資料時,我們必須修改Controller裡的代碼。
第三我們需要自己寫一個Fake類。
要想解決這些問題,下一節我們將討論ASP.NET MVC3裡如何使用IOC來解決對象的依賴問題。
最後,打個小廣告:西安分公司急聘如下人員,有意者直接聯絡我,左邊側欄有我的連絡方式,部落格園招聘頻道有詳細描述 http://job.cnblogs.com/offer/13800/
基本要求:
4年以上C#開發經驗, .Net基礎紮實,熟練使用.Net3.5新特性。
精通ASP.NET Web開發。
熟練使用WCF.
熟練使用ORM,LINQ TO SQL /Entity Framework或者NHibernate.
熟練使用JavaScript, JQuery.
熟悉Web標準,熟悉HTML&CSS.
熟悉SQL Server, 熟練掌握T-SQL,預存程序。
英語讀寫熟練,可以看懂英文需求,可以和客戶流暢的用英語文字溝通(MSN/Skype)
良好的編碼習慣。
熟悉下面任意一項優先:
熟悉敏捷開發人員優先
英語聽說熟練者優先
熟悉ASP.NET MVC者優先。
熟悉WPF者優先
熟悉Silverlight優先
有系統架構經驗者優先,有單元測試或者TDD經驗者優先。