>(Addison-Wesley Professional,2003)一書(shū)中,使用下面2個(gè)原則來(lái)定義TDD:">
第2步.增加一個(gè)NUnit框架引用
在Microsoft Visual Studio .NET里創(chuàng)建這個(gè)例子時(shí),你需要增加一個(gè)NUnit.framework.dll引用,如下:
在Solution Explorer右擊引用,然后選擇增加引用
NUnit.framework組件,在Add Reference對(duì)話(huà)框中按Select和OK按鈕。
圖4-2 描述了這步:
圖 4-2: 增加一個(gè) NUnit.framework.dll 引用到工程
第3步.為工程加一個(gè)類(lèi).
為工程加一個(gè)NumbersFixture類(lèi)。這里是這個(gè)例子的代碼。
using System;
using NUnit.Framework;
namespace NUnitQuickStart
{
[TestFixture]
public class NumersFixture
{
[Test]
public void AddTwoNumbers()
{
int a=1;
int b=2;
int sum=a+b;
Assert.AreEqual(sum,3);
}
}
}
第4步.建立你的Visual Studio 工程,使用NUnit-Gui測(cè)試
從程序->NUnit2.2打開(kāi)NUnit-gui,加載本本工程編譯的程序集.
為了在Visual Studio .NET中自動(dòng)運(yùn)行NUnit-Gui,你需要建立NUnit-Gui作為你的啟動(dòng)程序:
在 Solution Explorer里右擊你的NunitQuickStart工程。
在彈出菜單中選擇屬性。
在顯示的對(duì)話(huà)框的左面,點(diǎn)擊Configuration Properties夾
選擇出現(xiàn)在Configuration Properties夾下的Debugging。
在屬性框右邊的Start Action部分,選擇下拉框的Program作為Debug Mode值。
按Apply按鈕
設(shè)置NUnit-gui.exe 作為Start Application。,你既可以鍵入nunit-gui.exe的全路徑,也可使用瀏覽按鈕來(lái)指向它。
圖4-3 幫助描述本步驟:
圖 4-3:將NUnit-Gui 作為工程的測(cè)試運(yùn)行器
第5步.編譯運(yùn)行測(cè)試.
現(xiàn)在編譯solution。成功編譯后,開(kāi)始應(yīng)用程序。NUnit-Gui測(cè)試運(yùn)行器出現(xiàn)。當(dāng)你第一次開(kāi)始NUnit-Gui,它打開(kāi)時(shí)沒(méi)有測(cè)試加載。從File菜單選擇Oprn,瀏覽NUnitQuickStart.dll的路徑。當(dāng)你加載了測(cè)試的程序集,測(cè)試運(yùn)行器為加載的程序集的測(cè)試產(chǎn)生一個(gè)可見(jiàn)的表現(xiàn)。在例子中,測(cè)試程序集僅有一個(gè)測(cè)試,測(cè)試程序集的結(jié)構(gòu)如圖4-4所示:
圖 4-4: 測(cè)試程序集的測(cè)試在 NUnit-Gui中的視圖
按Run按鈕。樹(shù)的節(jié)點(diǎn)變?yōu)榫G色,而且測(cè)試運(yùn)行器窗口上的進(jìn)度條變綠,綠色代表成功通過(guò)。
4.其他的一些核心概念
上面的例子介紹了基本的NUnit特性和功能. TestFixture, Test, 和 Assert是3個(gè)基本的特征,我們可以用這些特性進(jìn)行程序員測(cè)試了.但是有的時(shí)候,你覺(jué)得這3個(gè)遠(yuǎn)遠(yuǎn)不夠,比如有的時(shí)候打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接多次,有沒(méi)有只讓它打開(kāi)一次的方法呢?如果我想把測(cè)試分類(lèi),應(yīng)該怎樣實(shí)現(xiàn)呢?如果我想忽略某些測(cè)試,又應(yīng)該如何去完成呢?不用擔(dān)心,NUnit已經(jīng)有這樣的功能了.
下面我們一一作出回答.
SetUp/TearDown 屬性
在早期給的test fixture定義里,我們說(shuō)test fixture的測(cè)試是一組常規(guī)運(yùn)行時(shí)資源.在測(cè)試完成之后,或是在測(cè)試執(zhí)行種,或是釋放或清除之前,這些常規(guī)運(yùn)行時(shí)資源在一確定的方式上可能需要獲取和初始化.NUnit使用2個(gè)額外的屬性:SetUp 和TearDown,支持這種常規(guī)的初始化/清除.我們上面的例子來(lái)描述這個(gè)功能.讓我們?cè)黾映朔?
using System;
using NUnit.Framework;
namespace NUnitQuickStart
{
[TestFixture]
public class NumersFixture
{
[Test]
public void AddTwoNumbers()
{
int a=1;
int b=2;
int sum=a+b;
Assert.AreEqual(sum,3);
}
[Test]
public void MultiplyTwoNumbers()
{
int a = 1;
int b = 2;
int product = a * b;
Assert.AreEqual(2, product);
}
}
}
我們仔細(xì)一看,不對(duì),有重復(fù)的代碼,如何去除重復(fù)的代碼呢?我們可以提取這些代碼到一個(gè)獨(dú)立的方法,然后標(biāo)志這個(gè)方法為SetUp 屬性,這樣2個(gè)測(cè)試方法可以共享對(duì)操作數(shù)的初始化了,這里是改動(dòng)后的代碼:
using System;
using NUnit.Framework;
namespace NUnitQuickStart
{
[TestFixture]
public class NumersFixture
{
private int a;
private int b;
[SetUp]
public void InitializeOperands()
{
a = 1;
b = 2;
}
[Test]
public void AddTwoNumbers()
{
int sum=a+b;
Assert.AreEqual(sum,3);
}
[Test]
public void MultiplyTwoNumbers()