第5步.編譯運行測試.
現在編譯solution。成功編譯后,開始應用程序。NUnit-Gui測試運行器出現。當你第一次開始NUnit-Gui,它打開時沒有測試加載。從File菜單選擇Oprn,瀏覽NUnitQuickStart.dll的路徑。當你加載了測試的程序集,測試運行器為加載的程序集的測試產生一個可見的表現。在例子中,測試程序集僅有一個測試,測試程序集的結構如圖4-4所示:
圖 4-4: 測試程序集的測試在 NUnit-Gui中的視圖
按Run按鈕。樹的節點變為綠色,而且測試運行器窗口上的進度條變綠,綠色代表成功通過。
4.其他的一些核心概念
上面的例子介紹了基本的NUnit特性和功能. TestFixture, Test, 和 Assert是3個最基本的特征,我們可以用這些特性進行程序員測試了.但是有的時候,你覺得這3個遠遠不夠,比如有的時候打開一個數據庫連接多次,有沒有只讓它打開一次的方法呢?如果我想把測試分類,應該怎樣實現呢?如果我想忽略某些測試,又應該如何去完成呢?不用擔心,NUnit已經有這樣的功能了.
下面我們一一作出回答.
SetUp/TearDown 屬性
在早期給的test fixture定義里,我們說test fixture的測試是一組常規運行時資源.在測試完成之后,或是在測試執行種,或是釋放或清除之前,這些常規運行時資源在一確定的方式上可能需要獲取和初始化.NUnit使用2個額外的屬性:SetUp 和TearDown,就支持這種常規的初始化/清除.我們上面的例子來描述這個功能.讓我們增加乘法.
1using System; 2using NUnit.Framework; 3 4namespace NUnitQuickStart 5{ 6 [TestFixture] 7 public class NumersFixture 8 { 9 [Test] 10 public void AddTwoNumbers() 11 { 12 int a=1; 13 int b=2; 14 int sum=a+b; 15 Assert.AreEqual(sum,3); 16 } 17 [Test] 18 public void MultiplyTwoNumbers() 19 { 20 int a = 1; 21 int b = 2; 22 int product = a * b; 23 Assert.AreEqual(2, product); 24 } 25 26 } 27} 28 |
我們仔細一看,不對,有重復的代碼,如何去除重復的代碼呢?我們可以提取這些代碼到一個獨立的方法,然后標志這個方法為SetUp 屬性,這樣2個測試方法可以共享對操作數的初始化了,這里是改動后的代碼:
1using System; 2using NUnit.Framework; 3 4namespace NUnitQuickStart 5{ 6 [TestFixture] 7 public class NumersFixture 8 { 9 private int a; 10 private int b; 11 [SetUp] 12 public void InitializeOperands() 13 { 14 a = 1; 15 b = 2; 16 } 17 18 [Test] 19 public void AddTwoNumbers() 20 { 21 int sum=a+b; 22 Assert.AreEqual(sum,3); 23 } 24 [Test] 25 public void MultiplyTwoNumbers() 26 { 27 int product = a * b; 28 Assert.AreEqual(2, product); 29 } 30 31 } 32} 33 |
這樣NUnit將在執行每個測試前執行標記SetUp屬性的方法.在本例中就是執行InitializeOperands()方法.記住,這里這個方法必須為public,不然就會有以下錯誤:Invalid Setup or TearDown method signature