在軟件開發領域,測試驅動開發(Test Driven Development,TDD)技術在逐漸爲廣大開發者所接受,它是在添加新代碼以前讓你的測試代碼出錯的一種開發技術。在開始編寫代碼以前首先要寫你的測試代碼,而後再編寫代碼讓你的測試經過,能夠想象,若是沒有一個好的單元測試工具,這項工做實際上是沒法完成的。相信不少.NET開發人員者對於開源的NUnit都不陌生,可是它並不能很好的與Visual Studio.NET IDE集成起來。數據庫
這裏我將向你們介紹另外一款優秀的單元測試工具——TestDriven.NET 2.0。它是以插件的形式集成在Visual Studio.NET IDE中的單元測試工具,可以兼容各類Visual Studio版本,而且集成了多種單元測試框架諸如NUnit,MbUnit,以及Visual Studio Team System適配器等。瀏覽器
TestDriven.NET的前身是NUnitAddIn,由Jamie Cansdale大師開發,一開始做者只是想作一個NUnit插件集成到Visual Studio中,通過屢次版本更新,NUnitAddIn在2004年9月底改名爲TestDriven.NET,並在當年的12月初發布了它的第一個Release版本,即TestDriven.NET 1.0。因爲它在開發中的出色表現,讓不少開發人員期待它的下一個版本的發佈,這一等待卻足足等了兩年,在今年的10月底,終於迎來了姍姍來遲的TestDriven.NET 2.0版本。然而這一等待倒是值得的,在2.0中,給咱們帶來了太多的驚喜,它集成了.NET Reflector、NConver、NConverExplorer、TypeMock.NET等,功能更增強大,下面我將一一介紹TestDriven.NET 2.0中涌現出的這些亮點。框架
安裝完TestDriven.NET 2.0 後,從新啓動Visual Studio 2005,能夠發如今Visual Studio.NET IDE的右鍵菜單中會多出一些新項,全部的操做都是直接經過這些右鍵菜單來完成。咱們先來編寫一小段簡單的測試代碼:ide
[Test]函數
public void TestMethodRun()工具
{單元測試
ClassA ca = new ClassA();測試
int expected = 2;this
int result = ca.GetResult();spa
Assert.AreEqual(expected, result);
}
在之前若是您使用NUnit進行單元測試,對於這樣一個簡單的測試,首先須要運行NUnit GUI,加載當前的程序集,並點擊Run按鈕運行測試,測試經過後再回到IDE繼續編寫代碼:
如今有了TestDriven.NET 2.0,就不會有這麼麻煩了,咱們不用額外運行任何程序,只須要在Visual Studio 2005 IDE中右擊並選擇Run Test菜單命令就能夠運行測試,平常開發中咱們都已經習慣了在IDE中進行這種操做,因此這樣更加符合咱們的開發習慣,也不用頻繁在應用程序之間切換窗口。
TestDriven.NET 2.0 測試的結果將在Output窗口中顯示。
稍微寫過一點單元測試代碼的朋友都知道,實際開發中的每個測試,測試方法都不可能只有一個斷言(Assert),在之前使用NUnit時,測試若是通不過,咱們沒法根據錯誤信息快速準確的定位到代碼中的某一個斷言,有了TestDriven.NET 2.0,當測試出現錯誤時,您只須要在Output窗口中雙擊錯誤提示,就能夠直接定位到出錯的斷言代碼行,極大的提升了排錯的效率。
在上面的測試代碼中,咱們僅僅是點擊了右鍵菜單Run Test,並無選擇運行哪個測試方法或者測試類,那麼TestDriven.NET 2.0是如何選擇並運行測試的呢?其實這跟咱們點擊鼠標的位置有關,點擊鼠標的位置若是在標記爲Test的測試方法內,它只會執行該測試方法;點擊鼠標的位置若是在方法以外而在標記爲TestFixture的類裏面,它會執行該類中全部標記爲Test的測試方法;點擊鼠標的位置若是在類以外,而在某一個命名空間裏面,則它會執行該命名空間下全部標記爲TestFixture的測試類。
在開發中,咱們經常會遇到跟蹤一些變量的值和某些方法的返回值,通常狀況下你們都會選擇使用Command Window,這種方式須要經過輸入一些命令來查看,未免有些麻煩。TestDriven.NET 2.0爲咱們提供了一鍵操做的功能,讓咱們能夠隨時隨地的跟蹤方法的返回值等,而不用輸入任何命令。在普通的方法中TestDriven.NET 2.0也能夠運行測試(Run Test),無論方法的做用域是public仍是private,是實例方法仍是static方法。若是測試方法是實例方法,它會使用默認的構造函數建立一個類的對象,在執行測試完成時再釋放掉該對象。若是方法有返回值,將會顯示在Output窗口中。運行下面的測試:
會在Output窗口中輸出:
在運行測試的過程當中,有時候須要調試跟蹤一些信息,若是使用NUnit,因爲它沒有集成在IDE中,也就沒法設置斷點。在TestDriven.NET 2.0提供了以Debug模式進行測試,能夠在測試代碼中設置斷點,並進行跟蹤,這時咱們須要選擇Test with | Debugger菜單命令。
在運行測試過程當中,有時候會有建立一些應用程序域,但並無被釋放,這樣會有部分程序集被加載該應用程序域中而且已經鎖定,因此可能會形成編譯失敗。這時須要釋放掉一些測試進程來能夠繼續編譯。在任務欄的右下角,全部的測試進程都會顯示在這裏,點擊右鍵,選擇Stop菜單命令能夠結束測試進程。
.NET Reflector是一個.NET平臺下的類瀏覽器和反編譯工具,咱們能夠用它來瀏覽程序集的類和方法,能夠分析由這些類和方法生成的中間語言 (MSIL),相信你們都用過,但它仍然是做爲一個獨立的工具存在的,在TestDriven.NET 2.0中它被很好的集成在了Visual Studio.NET IDE,經過右鍵菜單,就能夠直接使用.NET Reflector。
集成代碼覆蓋率分析工具
在作單元測試的時候,咱們老是但願知道本身的代碼有多少覆蓋到了,哪些代碼是沒有測試到的,若是沒有安裝Visual Studio Team System,沒法用Team Converage進行代碼覆蓋率的分析,這時使用大名鼎鼎的NConver是一個不錯的選擇,而且使用NconverExplorer能夠去查看分析結果,全部這些仍然須要運行新的應用程序,TestDriven.NET 2.0把這一切都集成到了IDE中,能夠在沒有安裝Team System的環境下使用Team Converage,也不用單獨安裝NConver。
重複運行測試能夠說是TestDriven.NET 2.0的一大亮點。TestDriven.NET2.0出現以前,若是在運行測試的過程當中,測試代碼不能經過,這時咱們會花幾秒鐘時間去修改測試代碼,並再次運行測試,可是每每卻發現找不到剛纔測試的是哪一個代碼塊,這時您可使用重複運行測試命令,無論你鼠標點擊的位置在哪兒,它都會直接運行上一次的測試。
在.NET平臺下,單元測試框架有不少,TestDriven.NET 2.0不可能把全部的單元測試框架盡收其中,可是它提供了一種很好的可插拔的機制。當你安裝一種新的測試框架後,TestDriven.NET 2.0會自動在它的菜單中出現這一項,在測試項目上點右鍵選擇Test With菜單命令,能夠選擇使用哪個單元測試框架。
在作單元測試的過程當中,最麻煩的部分就是咱們的測試代碼必須依賴於系統的其餘部分,如數據庫等。這時候咱們會使用一類替代品來代替這些真實的對象,即便用Mock對象,幸運的是咱們不用每次都去實現本身的Mock對象,在.NET平臺下,有不少款Mock對象的框架供咱們選擇。在TestDriven.NET 2.0 出現以前,使用哪一個Mock對象的框架,咱們須要去下載並安裝它們,在TestDriven.NET 2.0 中已經集成了TypeMock.NET框架,這使得咱們能夠很方便的直接使用而不用再去自行選擇。
若是隻作單元測試,我會選擇Nunit;若是要進行類庫反編譯,我會選擇.NET Relector;若是要分析代碼的覆蓋率,我會選擇NConver;若是要查看代碼覆蓋率的分析結果,我會選擇NConverExplorer,但若是要把以上全部的事情集成在IDE中一塊兒去作,那毫無疑問,我會選擇TestDriven.NET 2.0。但願我這篇文章能拋磚引玉,引領你們使用TestDriven.NET 2.0,走上單元測試之路。固然對於TestDriven.NET 2.0它的專業版和開發版已經開始收費,只有我的版仍然能夠免費下載使用。
有關TestDriven.NET 2.0的詳細信息請訪問:http://www.testdriven.net/