在軟件開(kāi)發(fā)領(lǐng)域,測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(Test Driven Development,TDD)技術(shù)在逐漸為廣大開(kāi)發(fā)者所接受,它是在添加新代碼之前讓你的測(cè)試代碼出錯(cuò)的一種開(kāi)發(fā)技術(shù)。在開(kāi)始編寫(xiě)代碼之前首先要寫(xiě)你的測(cè)試代碼,然后再編寫(xiě)代碼讓你的測(cè)試通過(guò),可以想象,如果沒(méi)有一個(gè)好的單元測(cè)試工具,這項(xiàng)工作其實(shí)是無(wú)法完成的。相信很多.NET開(kāi)發(fā)人員者對(duì)于開(kāi)源的NUnit都不陌生,但是它并不能很好的與Visual Studio.NET IDE集成起來(lái)。
這里我將向大家介紹另一款的單元測(cè)試工具——TestDriven.NET 2.0。它是以插件的形式集成在Visual Studio.NET IDE中的單元測(cè)試工具,能夠兼容各種Visual Studio版本,并且集成了多種單元測(cè)試框架諸如NUnit,MbUnit,以及Visual Studio Team System適配器等。
TestDriven.NET的前身是NUnitAddIn,由Jamie Cansdale大師開(kāi)發(fā),一開(kāi)始作者只是想做一個(gè)NUnit插件集成到Visual Studio中,經(jīng)過(guò)多次版本更新,NUnitAddIn在2004年9月底更名為T(mén)estDriven.NET,并在當(dāng)年的12月初發(fā)布了它的第一個(gè)Release版本,即TestDriven.NET 1.0。由于它在開(kāi)發(fā)中的出色表現(xiàn),讓很多開(kāi)發(fā)人員期待它的下一個(gè)版本的發(fā)布,這一等待卻足足等了兩年,在今年的10月底,終于迎來(lái)了姍姍來(lái)遲的TestDriven.NET 2.0版本。然而這一等待卻是值得的,在2.0中,給我們帶來(lái)了太多的驚喜,它集成了.NET Reflector、NConver、NConverExplorer、TypeMock.NET等,功能更加強(qiáng)大,下面我將一一介紹TestDriven.NET 2.0中涌現(xiàn)出的這些亮點(diǎn)。
安裝完TestDriven.NET 2.0 后,重新啟動(dòng)Visual Studio 2005,可以發(fā)現(xiàn)在Visual Studio.NET IDE的右鍵菜單中會(huì)多出一些新項(xiàng),所有的操作都是直接通過(guò)這些右鍵菜單來(lái)完成。我們先來(lái)編寫(xiě)一小段簡(jiǎn)單的測(cè)試代碼:
ClassA ca = new ClassA();
int result = ca.GetResult();
Assert.AreEqual(expected, result);
在以前如果您使用NUnit進(jìn)行單元測(cè)試,對(duì)于這樣一個(gè)簡(jiǎn)單的測(cè)試,首先需要運(yùn)行NUnit GUI,加載當(dāng)前的程序集,并點(diǎn)擊Run按鈕運(yùn)行測(cè)試,測(cè)試通過(guò)后再回到IDE繼續(xù)編寫(xiě)代碼:
現(xiàn)在有了TestDriven.NET 2.0,不會(huì)有這么麻煩了,我們不用額外運(yùn)行任何程序,只需要在Visual Studio 2005 IDE中右擊并選擇Run Test菜單命令可以運(yùn)行測(cè)試,日常開(kāi)發(fā)中我們都已經(jīng)習(xí)慣了在IDE中進(jìn)行這種操作,所以這樣更加符合我們的開(kāi)發(fā)習(xí)慣,也不用頻繁在應(yīng)用程序之間切換窗口。
TestDriven.NET 2.0
稍微寫(xiě)過(guò)一點(diǎn)單元測(cè)試代碼的朋友都知道,實(shí)際開(kāi)發(fā)中的每一個(gè)測(cè)試,測(cè)試方法都不可能只有一個(gè)斷言(Assert),在以前使用NUnit時(shí),測(cè)試如果通不過(guò),我們無(wú)法根據(jù)錯(cuò)誤信息快速準(zhǔn)確的定位到代碼中的某一個(gè)斷言,有了TestDriven.NET 2.0,當(dāng)測(cè)試出現(xiàn)錯(cuò)誤時(shí),您只需要在Output窗口中雙擊錯(cuò)誤提示,可以直接定位到出錯(cuò)的斷言代碼行,極大的提高了排錯(cuò)的效率。
在上面的測(cè)試代碼中,我們僅僅是點(diǎn)擊了右鍵菜單Run Test,并沒(méi)有選擇運(yùn)行哪一個(gè)測(cè)試方法或者測(cè)試類,那么TestDriven.NET 2.0是如何選擇并運(yùn)行測(cè)試的呢?其實(shí)這跟我們點(diǎn)擊鼠標(biāo)的位置有關(guān),點(diǎn)擊鼠標(biāo)的位置如果在標(biāo)記為T(mén)est的測(cè)試方法內(nèi),它只會(huì)執(zhí)行該測(cè)試方法;點(diǎn)擊鼠標(biāo)的位置如果在方法之外而在標(biāo)記為T(mén)estFixture的類里面,它會(huì)執(zhí)行該類中所有標(biāo)記為T(mén)est的測(cè)試方法;點(diǎn)擊鼠標(biāo)的位置如果在類之外,而在某一個(gè)命名空間里面,則它會(huì)執(zhí)行該命名空間下所有標(biāo)記為T(mén)estFixture的測(cè)試類。