ASP.NET MVC Web應(yīng)用程序工程
本文想專注于討論當(dāng)構(gòu)建ASP.NET MVC Web應(yīng)用程序工程時如何在測試驅(qū)動開發(fā)環(huán)境下構(gòu)建一個特定類型的單元測試。
其實,并非所有的單元測試都是優(yōu)秀的TDD測試。要想在測試驅(qū)動開發(fā)中應(yīng)用單元測試,你必須能夠執(zhí)行以非??斓乃俣葓?zhí)行單元測試。然而,并非所有的單元測試都能滿足這個要求。
例如,Visual Studio針對ASP.NET網(wǎng)站提供了一種特定類型的單元測試支持。你必須在IIS或開發(fā)web服務(wù)器上下文中執(zhí)行這個類型的單元測試。但是,當(dāng)你進行測試驅(qū)動開發(fā)時,這并不是一個適當(dāng)類型的單元測試,因為這個類型的單元測試速度太慢了。
在本文中,我想向你展示構(gòu)建用于測試驅(qū)動開發(fā)的單元測試的詳細過程。我將詳細地向你描述使用Visual Studio 2008單元測試框架的有關(guān)細節(jié)。此外,我還要討論若干高級題目,例如測試私有方法和如何從命令行執(zhí)行測試,等等。
快速創(chuàng)建一個ASP.NET MVC Web應(yīng)用程序工程示例
首先,讓我們創(chuàng)建一個新的ASP.NET MVC Web應(yīng)用程序工程并且創(chuàng)建一個相應(yīng)的測試工程。這一步是非常容易的。當(dāng)你創(chuàng)建一個新的ASP.NET MVC Web應(yīng)用程序工程時,系統(tǒng)會隨后提示你是否創(chuàng)建一個新的Visual Studio測試工程,如圖1所示。只要你保持圖1頂部的單選按鈕(即缺省的選項),那么你會看到一個新的測試工程自動地添加到你的方案上。
現(xiàn)在的問題是:既然你有一個測試工程,那么你該如何使用這個測試工程呢?
當(dāng)你創(chuàng)建一個新的ASP.NET MVC應(yīng)用程序時,工程包括一個名字為HomeController的控制器。這個控制器有兩個名字分別為Index()和About()的缺省方法。相應(yīng)于該HomeController工程提供了一個文件名字為HomeControlleterTest的測試工程。這個測試文件包含兩個測試方法,分別為Index()和About()。
默認情況下,Index()和About()這兩個測試方法內(nèi)容為空(如圖2所示)。接下來,你可以在這些方法中添加你的測試邏輯。
假設(shè)我們要構(gòu)建一個在線存儲系統(tǒng)。比如說,你想創(chuàng)建一個Details頁面用于顯示一個特定產(chǎn)品的細節(jié)信息。然后,你要把一個包含ProductId的查詢字符串傳遞到這個Details頁面,并且要實現(xiàn)從數(shù)據(jù)庫中檢索產(chǎn)品細節(jié)信息,而且要把此信息顯示到頁面上。
在良好的測試驅(qū)動開發(fā)實踐中,在真正編碼之前,你首先需要編寫一個測試。你不是先編寫任何應(yīng)用程序代碼,而是先編寫相應(yīng)于該代碼的測試。為了創(chuàng)建一個成功的Details頁面,必須滿足下列測試要求:
(1)如果沒有把一個ProductId傳遞到該頁面,則應(yīng)該拋出一個異常
(2)該ProductId應(yīng)該用于從數(shù)據(jù)庫中檢索一個產(chǎn)品
(3)如果不能從數(shù)據(jù)庫中檢索出一個相匹配的產(chǎn)品,那么應(yīng)該拋出一個異常
(4)Details視圖應(yīng)該能夠順利生成
(5)Product數(shù)據(jù)應(yīng)該被賦值給Details視圖的ViewData結(jié)構(gòu)
以上介紹ASP.NET MVC Web應(yīng)用程序工程
【編輯推薦】