Explicit屬性
本屬性忽略一個test和test fixture,直到它們顯式的選擇執行。如果test和test fixture在執行的過程中被發現,就忽略他們。所以,這樣一來進度條顯示為黃色,因為有test或test fixture忽略了。
例如:
1 2 [Test,Explicit] 3 [Category("Exception")] 4 [ExpectedException(typeof(DivideByZeroException))] 5 public void DivideByZero() 6 { 7 int zero = 0; 8 int infinity = a/zero; 9 Assert.Fail("Should have gotten an exception"); 10 } 11 |
為什么會設計成這樣呢?原因是Ingore屬性忽略了某個test或test fixture,那么他們你再想調用執行是不可能的。那么萬一有一天我想調用被忽略的test或test fixture怎么辦,就用Explicit屬性了。我想這就是其中的原因吧。
Expected Exception屬性
期望在運行時拋出一個期望的異常,如果是,則測試通過,否則不通過。
參看下面的例子:
1[Test] 2[ExpectedException(typeofInvalidOperationException))] 3public void ExpectAnException() 4 { 5 int zero = 0; 6 int infinity = a/zero; 7 Assert.Fail("Should have gotten an exception"); 8 9 } 10 |
在本測試中,應該拋出DivideByZeroException,但是期望的是InvalidOperationException,所以不能通過。如果我們將[ExpectedException(typeof(InvalidOperationException))]改為[ExpectedException(typeof(DivideByZeroException))],本測試通過。
5 . 測試生命周期合約
如果記得test case的定義,其中一個屬性是測試的獨立性或隔離性.SetUp/TearDown方法提供達到測試隔離性的目的.SetUp確保共享的資源在每個測試運行前正確初始化,TearDown確保沒有運行測試產生的遺留副作用.
TestFixtureSetUp/TestFixtureTearDown同樣提供相同的目的,但是卻在test fixture范圍里,我們剛才描述的內容組成了測試框架的運行時容器(test runner)和你寫的測試之間的生命周期合約(life-cycle contract).
為了描述這個合約,我們寫一個簡單的測試來說明什么方法調用了,怎么合適調用的.這里是代碼:
1using System; 2using NUnit.Framework; 3[TestFixture] 4public class LifeCycleContractFixture 5{ 6 [TestFixtureSetUp] 7 public void FixtureSetUp() 8 { 9 Console.Out.WriteLine("FixtureSetUp"); 10 } 11 12 [TestFixtureTearDown] 13 public void FixtureTearDown() 14 { 15 Console.Out.WriteLine("FixtureTearDown"); 16 } 17 18 [SetUp] 19 public void SetUp() 20 { 21 Console.Out.WriteLine("SetUp"); 22 } 23 24 [TearDown] 25 public void TearDown() 26 { 27 Console.Out.WriteLine("TearDown"); 28 } 29 30 [Test] 31 public void Test1() 32 { 33 Console.Out.WriteLine("Test 1"); 34 } 35 36 [Test] 37 public void Test2() 38 { 39 Console.Out.WriteLine("Test 2"); 40 } 41 42} 43 44 |
當編譯和運行這個測試,可以在System.Console窗口看到下面的輸出:
FixtureSetUpSetUpTest 1TearDownSetUpTest 2TearDownFixtureTearDown
可以看到, SetUp/TearDown方法調用在每個測試方法的前后. 整個fixture調用一次TestFixtureSetUp/TestFixtureTearDown方法.
下載:
1)NUnit的應用文檔下載
2)本文的PDF版下載
3)本文的源代碼 下載
參考
1) http://www.nunit.org
2) James W. Newkirk and Alexei A. Vorontsov ,Test-Driven Development in Microsoft .NET,Microsoft Press,2003
3) http://www.testdriven.com
4) Kent Beck, Test-Driven Development: By Example ,Addison-Wesley Professional, 2003
5) Andrew Hunt ,David Thomas ,Pragmatic Unit Testing In C# With NUnit