簡單的Test Case 1. 創建TestCase的一個實例; 2. Override方法RunTest(); 3. 如要檢查某值,則調用Assert。 例如,測試“兩個Money對象之和與包含它們之和的對象相等”的測試代碼如下: public void TestSimpleAdd() { Money m12CHF= new Money(12, "CHF"); Money m14CHF= new Money(14, "CHF"); Money expected= new Money(26, "CHF"); Money result= m12CHF.Add(m14CHF); Assert(expected.Equals(result)); } 如果要寫的測試與以前寫的測試非常像,那么托匆桓鯢ixture來代替。如果想在一個測試中運行更多的東西,就創建一個Suite。 Fixture 當有個公共的fixture時,我們可以這么做: 1. 創建TestCase的子類。 2. 為fixture的每部分加入一個實例變量。 3. Override SetUp()初始化這些變量。 4. Override TearDown()釋放任何在SetUp中分配的永久資源。 例如,編寫用來與12 Swiss Francs,14 Swiss Francs和28 US Dollars不同組合一起工作的TestCase時,首先創建一個fixture: public class MoneyTest: TestCase { private Money f12CHF; private Money f14CHF; private Money f28USD; protected override void SetUp() { f12CHF= new Money(12, "CHF"); f14CHF= new Money(14, "CHF"); f28USD= new Money(28, "USD"); } } 一旦準備好Fixture,就可書寫任意多的測試用例。 Test Case NUnit為書寫一個基于Fixture的測試提供了簡明的方法: 1. 在fixture類中書寫一個public的測試方法。在此,必須確保這個方法是public的,否則它將不能通過reflection被調用。 2. 創建這個TestCase的一個實例,并把這個測試方法的名字傳給它的constructor。 例如,測試一個Money對象與另一個MoneyBag的和: public void TestMoneyMoneyBag() { // [12 CHF] + [14 CHF] + [28 USD] == {[26 CHF][28 USD]} Money bag[]= { new Money(26, "CHF"), new Money(28, "USD") }; MoneyBag expected= new MoneyBag(bag); AssertEquals(expected, f12CHF.Add(f28USD.Add(f14CHF))); } 創建MoneyTest的實例: new MoneyTest("TestMoneyMoneyBag") 當這個測試運行起來時,測試會查找測試方法的名字并調用它。一旦有多個測試,就可以把他們組織成一個Suite。 Suite TestResult result= (new MoneyTest("TestMoneyMoneyBag")).Run(); 創建一個有兩個測試用例的suite并且一次運行它們: TestSuite suite= new TestSuite(); suite.AddTest(new MoneyTest("TestMoneyEquals")); suite.AddTest(new MoneyTest("TestSimpleAdd")); TestResult result= suite.Run(); 另一種方法是讓NUnit從一個TestCase吸取出一個suite,只需把你的TestCase傳給TestSuite的constructor即可: TestSuite suite= new TestSuite(typeof(MoneyTest)); TestResult result= suite.Run(); 當創建只包含一個測試用例子類的suite時,使用手工方法。否則就采用自動方法,它避免了在每增加新的測試用例時都要改變suite的創建代碼。 TestSuites并不是只能包含TestCase類。它可以包含實現了ITest的任意對象。例如,你可以在你的代碼中創建一個TestSuite,同樣我也可以在我的代碼中這樣做。那么我們就可以創建一個包含它們的TestSuite來一次運行它們: TestSuite suite= new TestSuite(); suite.AddTest(Kent.Suite()); suite.AddTest(Erich.Suite()); TestResult result= suite.Run(); TestRunner 例如,在MoneyTest中加入以下代碼使MoneyTest suite對于TestRunner可用: public static ITest Suite { get { TestSuite suite= new TestSuite(); suite.addTest(new MoneyTest("TestMoneyEquals")); suite.addTest(new MoneyTest("TestSimpleAdd")); return suite; } } 如果一個TestCase類不定義一個suite方法,TestRunner將自動產生用所有方法來填充的suite,并在這些方法名字前加上前綴“Test”。NUnit提供兩種TestRunner:GUI和字符版本。 GUI窗口包含:填寫包含測試類的DLL 或EXE名字的文本框;填寫在DLL 或EXE中擁有Suite屬性的類名。如下圖:
同樣,有一個NUnit的批處理接口。為了使用命令行的NUnit,可以在系統提示符下鍵入NUnitConsole后跟包含Suite屬性的類所在的裝配體。例如,使用批處理TestRunner測試MoneyTest: C:\NUnitConsole NUnit.Samples.Money.MoneyTest,NUnitSamples.dll 批處理接口將結果以文本的方式輸出。另一個可選方法是在你的TestCase類的main方法中調用批處理接口。如下: public static void Main(String[] args) { NUnit.TextUI.TestRunner.Run(Suite); } 這樣,只需在系統提示符下鍵入MoneyTest 就可運行測試。 | |