ExpectedException
這里是一個驗證這個假設的測試.有的時候,我們知道某些操作會有異常出現,例如, 在實例中增加除法,某個操作被0除,拋出的異常和.NET文檔描述的一樣.參看以下源代碼.
1[Test] 2[ExpectedException(typeof(DivideByZeroException))] 3public void DivideByZero() 4{ 5 int zero = 0; 6 int infinity = a/zero; 7 Assert.Fail("Should have gotten an exception"); 8} 9 |
除了[Test]屬性之外, DivideByZero方法有另外一個客戶屬性: ExpectedException.在這個屬性里,你可以在執行過程中捕獲你期望的異常類型,例如在本例就是DivideByZeroException.如果這個方法在沒有拋出期望異常的情況下完成了,這個測試失敗.使用這個屬性幫助我們寫程序員測試驗證邊界條件(Boundary Conditions).
Ignore 屬性
由于種種原因,有一些測試我們不想運行.當然,這些原因可能包括你認為這個測試還沒有完成,這個測試正在重構之中,這個測試的需求不是太明確.但你有不想破壞測試,不然進度條可是紅色的喲.怎么辦?使用Ignore屬性.你可以保持測試,但又不運行它們.讓我們標記MultiplyTwoNumbers測試方法為Ignore屬性:
1[Test] 2[Ignore("Multiplication is ignored")] 3public void MultiplyTwoNumbers() 4{ 5 int product = a * b; 6 Assert.AreEqual(2, product); 7} |
運行測試,現在產生了下面的輸出(在圖5-1顯示):
圖 5-1: 在一個程序員測試中使用 Ignore屬性
Ignore屬性可以附加到一個獨立的測試方法,也可以附加到整個測試類(TestFixture).如果Ignore屬性附加到TestFixture,所有在fixture的測試都被忽略.
TestFixtureSetUp/TestFixtureTearDown
有時,一組測試需要的資源太昂貴.例如,數據庫連接可能是一個關鍵資源,在一個test fixture的每個測試中,打開/關閉數據庫連接可能非常慢.這就是我在開始提到的問題.如何解決?NUnit有一對類似于前面討論的SetUp/TearDown的屬性:
TestFixtureSetUp/TestFixtureTearDown.正如他們名字表明的一樣,這些屬性用來標記為整個test fixture初始化/釋放資源方法一次的方法.
例如,如果你想為所有test fixture的測試共享相同的數據庫連接對象,我們可以寫一個打開數據庫連接的方法,標記為TestFixtureSetUp屬性,編寫另外一個關閉數據庫連接的方法,標記為TestFixtureTearDown屬性.這里是描述這個的例子.
1using NUnit.Framework; 2 3[TestFixture] 4public class DatabaseFixture 5{ 6 [TestFixtureSetUp] 7 public void OpenConnection() 8 { 9 //open the connection to the database 10 } 11 12 [TestFixtureTearDown] 13 public void CloseConnection() 14 { 15 //close the connection to the database 16 } 17 18 [SetUp] 19 public void CreateDatabaseObjects() 20 { 21 //insert the records into the database table 22 } 23 24 [TearDown] 25 public void DeleteDatabaseObjects() 26 { 27 //remove the inserted records from the database table 28 } 29 30 [Test] 31 public void ReadOneObject() 32 { 33 //load one record using the open database connection 34 } 35 36 [Test] 37 public void ReadManyObjects() 38 { 39 //load many records using the open database connection 40 } 41} 42 43 |
Test Suite
Test Suite是test case或其他test suite的集合. 合成(Composite),模式描述了test case和test suite之間的關系.
參考來自NUnit的關于Suite的代碼