>(Addison-Wesley Professional,2003)一書中,使用下面2個(gè)原則來定義TDD:">
1. TDD的簡介
首先什么是TDD呢?Kent Beck在他的<<測(cè)試驅(qū)動(dòng)開發(fā) >>(Addison-Wesley Professional,2003)一書中,使用下面2個(gè)原則來定義TDD:
·除非你有一個(gè)失敗的自動(dòng)測(cè)試,永遠(yuǎn)不要寫一單行代碼.
·阻止重復(fù)
我想第一個(gè)原則是顯而易見的.在沒有失敗的自動(dòng)測(cè)試下不要寫代碼.因?yàn)闇y(cè)試是嵌入在代碼必須滿足的需求中.如果沒有需求,沒有必要實(shí)現(xiàn)任何東西.所以這個(gè)原則阻止我們?nèi)?shí)現(xiàn)那些沒有測(cè)試和在解決方案中不需要的功能.
第二個(gè)原則說明了在一個(gè)程序中,不應(yīng)該包含重復(fù)的代碼.如果代碼重復(fù),我想這是不好的軟件設(shè)計(jì)的象征.隨著時(shí)間的流逝,它會(huì)對(duì)程序造成不一致的問題,并且使代碼變非常混亂 ,因?yàn)槲覀儠r(shí)常不會(huì)記得重復(fù)代碼的位置.如果發(fā)現(xiàn)代碼重復(fù),我想我們應(yīng)該立即刪除代碼重復(fù).其實(shí)這涉及到重構(gòu)了.在這里我不多講了.
一般來說,測(cè)試分為2種類型,一是程序員自己的測(cè)試,另外一種是客戶的測(cè)試.關(guān)于客戶測(cè)試,我推薦一個(gè)FIT的框架,非常不錯(cuò)。在這里,我們講的TDD是程序員測(cè)試.那么什么是程序員測(cè)試呢?我認(rèn)為是我們常說的單元測(cè)試.既然是單元測(cè)試,在.NET里勢(shì)必會(huì)用到某些工具,目前恐怕是我即將介紹的javascript:;" onClick="javascript:tagshow(event, 'NUnit');" target="_self">NUnit了
2.NUnit的介紹
NUnit是一個(gè)單元測(cè)試框架,專門針對(duì)于.NET來寫的.其實(shí)在前面有JUnit(Java),CPPUnit(C++),他們都是xUnit的一員.初,它是從JUnit而來.現(xiàn)在的版本是2.2.接下來我所用的都是基于這個(gè)版本.
NUnit初是由James W. Newkirk, Alexei A. Vorontsov 和Philip A. Craig, 后來開發(fā)團(tuán)隊(duì)逐漸龐大起來.在開發(fā)過程中, Kent Beck 和Erich Gamma2位牛人也提供了許多幫助.看來對(duì)于NUnit還真是下了一番力氣了.JNUnit是xUnit家族種的第4個(gè)主打產(chǎn)品,完全由C#語言來編寫,并且編寫時(shí)充分利用了許多.NET的特性,比如反射,客戶屬性等等.
重要的一點(diǎn)是它適合于所有.NET語言.
如果你還沒有下載,可以到http://www.nunit.org/去下載.
2.1 NUnit的介紹
Ok,下面正式講解NUnit.在講解之前,看看幾張圖片:
圖1 NUnit運(yùn)行的效果
圖2 NUnit運(yùn)行的另外一個(gè)效果
從中我們可以非常容易發(fā)現(xiàn),右邊是個(gè)狀態(tài)條,圖1是紅色的,圖2是綠色的.為什么會(huì)這樣呢?因?yàn)槿绻袦y(cè)試案例運(yùn)行成功,為綠色,反之如果有一個(gè)不成功,則為紅色,但也有黃色的.左面的工作域內(nèi)則是我們寫的每一個(gè)單元測(cè)試.
通過上面的圖片,我想你對(duì)NUnit有個(gè)總的了解了.
接下來還是分為2個(gè)部分,一是NUnit的布局,另外一部分是它的核心概念.
首先熟悉一下NUnit GUI的布局.
讓我們更進(jìn)一步看一下測(cè)試運(yùn)行器窗口的布局。在右邊面板的中間,可以看到測(cè)試進(jìn)度條。進(jìn)度條的顏色反映了測(cè)試執(zhí)行的狀態(tài):
綠色 描述目前所執(zhí)行的測(cè)試都通過
黃色 意味某些測(cè)試忽略,但是這里沒有失敗
紅色 表示有失敗
底部的狀態(tài)條表示下面的狀態(tài):
狀態(tài).說明了現(xiàn)在運(yùn)行測(cè)試的狀態(tài)。當(dāng)所有測(cè)試完成時(shí),狀態(tài)變?yōu)镃ompleted.運(yùn)行測(cè)試中,狀態(tài)是Running: (是正在運(yùn)行的測(cè)試名稱)。
Test Cases說明加載的程序集中測(cè)試案例的總個(gè)數(shù)。這也是測(cè)試樹里葉子節(jié)點(diǎn)的個(gè)數(shù)。
Tests Run 已經(jīng)完成的測(cè)試個(gè)數(shù)。
Failures 到目前為止,所有測(cè)試中失敗的個(gè)數(shù).
Time 顯示運(yùn)行測(cè)試時(shí)間(以秒計(jì))
File主菜單有以下內(nèi)容:
New Project允許你創(chuàng)建一個(gè)新工程。工程是一個(gè)測(cè)試程序集的集合。這種機(jī)制讓你組織多個(gè)測(cè)試程序集,并把他們作為一個(gè)組對(duì)待。
Open 加載一個(gè)新的測(cè)試程序集,或一個(gè)以前保存的NUnit工程文件。
Close關(guān)閉現(xiàn)在加載的測(cè)試程序集或現(xiàn)在加載的NUnit工程。
Save 保存現(xiàn)在的Nunit工程到一個(gè)文件。如果正工作單個(gè)程序集,本菜單項(xiàng)允許你創(chuàng)建一個(gè)新的NUnit工程,并把它保存在文件里。
Save As允許你將現(xiàn)有NUnit工程作為一個(gè)文件保存。
Reload 強(qiáng)制重載現(xiàn)有測(cè)試程序集或NUnit工程。NUnit-Gui自動(dòng)監(jiān)測(cè)現(xiàn)加載的測(cè)試程序集的變化。
當(dāng)程序集變化時(shí),測(cè)試運(yùn)行器重新加載測(cè)試程序集。(當(dāng)測(cè)試正運(yùn)行時(shí),現(xiàn)在加載的測(cè)試程序集不會(huì)重新加載。在測(cè)試運(yùn)行之間測(cè)試程序集僅可以重新加載。一個(gè)忠告:如果測(cè)試程序集依賴另外一個(gè)程序集,測(cè)試運(yùn)行器不會(huì)觀察任何依賴的程序集。對(duì)測(cè)試運(yùn)行器來說,強(qiáng)制一個(gè)重載使全部依賴的程序集變化可見。
Recent Files 說明5個(gè)近在NUnit中加載的測(cè)試程序集或NUnit工程(這個(gè)列表在Windows注冊(cè)表,由每個(gè)用戶維護(hù),因此如果你共享你的PC,你僅看到你的測(cè)試)。近程序集的數(shù)量可以使用Options菜單項(xiàng)修改,可以訪問Tool主菜單。