日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]NUnit详细使用方法

發布時間:2025/3/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]NUnit详细使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文轉自:http://www.cnblogs.com/confach/archive/2005/06/20/177817.html
原文如下:
----------
NUnit2.0詳細使用方法 注:NUnit中文文檔可以參看我的另一個站點:http://www.36sign.com/nunit

前一段時間,有人問我在.NET里如何進行TDD開發.這個問題促使我想對NUnit做一個詳細的介紹.因為我們大家都知道NUnit是在.NET進行TDD的利器.
如果你已經知道很多關于NUnit的應用,請指出我的不對之處和提出一些建議,使本文更加完善.如果你對NUnit還不是很了解的話,我建議你還是閱讀一下.
本文分為以下部分:

1. TDD的簡介

首先什么是TDD呢?Kent Beck在他的<<測試驅動開發 >>(Addison-Wesley Professional,2003)一書中,使用下面2個原則來定義TDD: ·除非你有一個失敗的自動測試,永遠不要寫一單行代碼. ·阻止重復 我想第一個原則是顯而易見的.在沒有失敗的自動測試下就不要寫代碼.因為測試是嵌入在代碼必須滿足的需求中.如果沒有需求,就沒有必要實現任何東西.所以這個原則阻止我們去實現那些沒有測試和在解決方案中不需要的功能. 第二個原則說明了在一個程序中,不應該包含重復的代碼.如果代碼重復,我想這就是不好的軟件設計的象征.隨著時間的流逝,它會對程序造成不一致的問題,并且使代碼變非常混亂 ,因為我們時常不會記得重復代碼的位置.如果發現代碼重復,我想我們應該立即刪除代碼重復.其實這就涉及到重構了.在這里我就不多講了. 一般來說,測試分為2種類型,一是程序員自己的測試,另外一種是客戶的測試.關于客戶測試,我推薦一個FIT的框架,非常不錯。在這里,我們講的TDD就是程序員測試.那么什么是程序員測試呢?我認為就是我們常說的單元測試.既然是單元測試,在.NET里勢必會用到某些工具,目前最著名恐怕就是我即將介紹的NUnit了,

2.NUnit的介紹

NUnit是一個單元測試框架,專門針對于.NET來寫的.其實在前面有JUnit(Java),CPPUnit(C++),他們都是xUnit的一員.最初,它是從JUnit而來.現在的版本是2.2.接下來我所用的都是基于這個版本. NUnit最初是由James W. Newkirk, Alexei A. Vorontsov 和Philip A. Craig, 后來開發團隊逐漸龐大起來.在開發過程中, Kent Beck 和Erich Gamma2位牛人也提供了許多幫助.看來對于NUnit還真是下了一番力氣了.J NUnit是xUnit家族種的第4個主打產品,完全由C#語言來編寫,并且編寫時充分利用了許多.NET的特性,比如反射,客戶屬性等等. 最重要的一點是它適合于所有.NET語言. 如果你還沒有下載,可以到http://www.nunit.org/去下載.

2.1 NUnit的介紹

?? Ok,下面正式講解NUnit.在講解之前,看看幾張圖片: ????? 圖1? NUnit運行的效果

???????????????????? 圖2?? NUnit運行的另外一個效果
?從中我們可以非常容易發現,右邊是個狀態條,圖1是紅色的,圖2是綠色的.為什么會這樣呢?因為如果所有測試案例運行成功,就為綠色,反之如果有一個不成功,則為紅色,但也有黃色的.左面的工作域內則是我們寫的每一個單元測試. 通過上面的圖片,我想你對NUnit有個總的了解了. 接下來還是分為2個部分,一是NUnit的布局,另外一部分就是它的核心概念. 首先熟悉一下NUnit GUI的布局. 讓我們更進一步看一下測試運行器窗口的布局。在右邊面板的中間,可以看到測試進度條。進度條的顏色反映了測試執行的狀態:
  • 綠色 描述目前所執行的測試都通過
  • 黃色 意味某些測試忽略,但是這里沒有失敗
  • 紅色 表示有失敗
底部的狀態條表示下面的狀態:
  • 狀態.說明了現在運行測試的狀態。當所有測試完成時,狀態變為Completed.運行測試中,狀態是Running: <test-name> (<test-name>是正在運行的測試名稱)。
  • Test Cases說明加載的程序集中測試案例的總個數。這也是測試樹里葉子節點的個數。
  • Tests Run 已經完成的測試個數。
  • Failures ?到目前為止,所有測試中失敗的個數.
  • Time? 顯示運行測試時間(以秒計)
File主菜單有以下內容:
  • New Project允許你創建一個新工程。工程是一個測試程序集的集合。這種機制讓你組織多個測試程序集,并把他們作為一個組對待。
  • Open 加載一個新的測試程序集,或一個以前保存的NUnit工程文件。
  • Close關閉現在加載的測試程序集或現在加載的NUnit工程。
  • Save 保存現在的Nunit工程到一個文件。如果正工作單個程序集,本菜單項允許你創建一個新的NUnit工程,并把它保存在文件里。
  • Save As允許你將現有NUnit工程作為一個文件保存。
  • Reload 強制重載現有測試程序集或NUnit工程。NUnit-Gui自動監測現加載的測試程序集的變化。
當程序集變化時,測試運行器重新加載測試程序集。(當測試正運行時,現在加載的測試程序集不會重新加載。在測試運行之間測試程序集僅可以重新加載。一個忠告:如果測試程序集依賴另外一個程序集,測試運行器不會觀察任何依賴的程序集。對測試運行器來說,強制一個重載使全部依賴的程序集變化可見。
  • Recent Files? 說明5個最近在NUnit中加載的測試程序集或NUnit工程(這個列表在Windows注冊表,由每個用戶維護,因此如果你共享你的PC,你僅看到你的測試)。最近程序集的數量可以使用Options菜單項修改,可以訪問Tool主菜單。
  • Exit退出。
  • ?View菜單有以下內容:
  • Expand一層層擴展現在樹中所選節點
  • Collapse 折疊現在樹中選擇的節點
  • Expand All遞歸擴展樹中所選節點后的所有節點
  • Collapse All遞歸折疊樹中所選節點后的所有節點
  • Expand Fixtures擴展樹中所有代表測試fixture的節點。
  • Collapse Fixtures 折疊樹中所有代表測試fixture的節點。
  • Properties 顯示樹中現所選節點的屬性。
  • Tools 菜單由這些項:
  • Save Results as XML作為一XML文件保存運行測試的結果。
  • Options讓你定制NUnit的行為。
現在看看右邊,你已經熟悉Run按鈕和進度條。這里還有一個緊跟Run按鈕的Stop按鈕:點擊這個按鈕會終止執行正運行的測試。進度條下面是一個文本窗口,在它上方,由以下4個標簽:
  • Errors and Failures 窗口顯示失敗的測試。在我們的例子里,這個窗口是空。
  • Tests Not Run 窗口顯示沒有得到執行的測試。
  • Console.Error 窗口顯示運行測試產生的錯誤消息。這些此消息是應用程序代碼使用Console.Error輸出流可以輸出的。
  • Console.Out窗口顯示運行測試打印到Console.Error輸出流的文本消息。

2.2 一些常用屬性

?接下來,我將講述這個框架如何使用.同時也涉及到一些非常重要的概念,我想其客戶屬性是非常重要的.在NUnit里,有以下幾種屬性:
  • Test?Fixture
  • Test
下面我將對每種屬性一一講解.

TestFixtureAttribute

??? 本屬性標記一個類包含測試,當然setup和teardown方法可有可無.(關于setup 和teardown方法在后面介紹) ??? 做為一個測試的類,這個類還有一些限制
  • 必須是Public,否則NUnit看不到它的存在.
  • 它必須有一個缺省的構造函數,否則是NUnit不會構造它.
  • 構造函數應該沒有任何副作用,因為NUnit在運行時經常會構造這個類多次,如果要是構造函數要什么副作用的話,那不是亂了.
舉個例子 ?1??using?System;
?2??using
?NUnit.Framework;
?3??namespace
?MyTest.Tests
?4
{
?5

?6
??[TestFixture]
?7??public?class
?PriceFixture
?8??
{
?9????//?

10??}

11}

12

TestAttribute

?Test屬性用來標記一個類(已經標記為TestFixture)的某個方法是可以測試的.為了和先前的版本向后兼容,頭4個字符(“test”)忽略大小寫.(參看http://nunit.org/test.html) 這個測試方法可以定義為:??????? public?void?MethodName() 從上面可以看出,這個方法沒有任何參數,其實測試方法必須沒有參數.如果我們定義方法不對的話,這個方法不會出現在測試方法列表中.也就是說在NUnit的界面左邊的工作域內,看不到這個方法.還有一點就是這個方法不返回任何參數,并且必須為Public. 例如: ?1using?System;
?2using
?NUnit.Framework;
?3

?4namespace
?MyTest.Tests
?5
{
?6
??[TestFixture]
?7??public?class
?SuccessTests
?8??
{
?9????[Test]?public?void
?Test1()
10????{?/**//*??*/?}

11??}

12}

13
14
一般來說,有了上面兩個屬性,你可以做基本的事情了.
另外,我們再對如何進行比較做一個描述。 在NUnit中,用Assert(斷言)進行比較,Assert是一個類,它包括以下方法:AreEqual,AreSame,Equals, Fail,Ignore,IsFalse,IsNotNull,具體請參看NUnit的文檔。

3.如何在.NET中應用NUnit

我將舉個例子,一步一步演示如何去使用NUnit.

第1步.為測試代碼創建一個Visual Studio工程。

在Microsoft Visual Studio .NET中,讓我們開始創建一個新的工程。選擇Visual C#工程作為工程類型,Class Library作為模板。將工程命名為NUnitQuickStart.圖4-1是一個描述本步驟的Visual Studio .NET。 ?
??????????????????????????? 圖 4-1: 創建第一個NUnit工程

第2步.增加一個NUnit框架引用

在Microsoft Visual Studio .NET里創建這個例子時,你需要增加一個NUnit.framework.dll引用,如下: 在Solution Explorer右擊引用,然后選擇增加引用 ?? NUnit.framework組件,在Add Reference對話框中按Select和OK按鈕。 圖4-2 描述了這步: ?
圖 4-2: 增加一個 NUnit.framework.dll 引用到工程

第3步.為工程加一個類.

為工程加一個NumbersFixture類。這里是這個例子的代碼。 ?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????????????}
?
18}

19

第4步.建立你的Visual Studio 工程,使用NUnit-Gui測試

從程序->NUnit2.2打開NUnit-gui,加載本本工程編譯的程序集. 為了在Visual Studio .NET中自動運行NUnit-Gui,你需要建立NUnit-Gui作為你的啟動程序: 在 Solution Explorer里右擊你的NunitQuickStart工程。 在彈出菜單中選擇屬性。 在顯示的對話框的左面,點擊Configuration Properties夾 選擇出現在Configuration Properties夾下的Debugging。 在屬性框右邊的Start Action部分,選擇下拉框的Program作為Debug Mode值。 按Apply按鈕 設置NUnit-gui.exe 作為Start Application。,你既可以鍵入nunit-gui.exe的全路徑,也可使用瀏覽按鈕來指向它。 圖4-3 幫助描述本步驟:
??
圖 4-3:將NUnit-Gui 作為工程的測試運行器

第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

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的代碼 Suite Attribute

?1namespace?NUnit.Tests
?2
{
?3using
?System;
?4??using
?NUnit.Framework;
?5
?
?6

?7

?8??public?class
?AllTests
?9??
{
10
????[Suite]
11????public?static
?TestSuite?Suite
12????
{
13??????get

14??????{
15????????TestSuite?suite?=?new?TestSuite("All?Tests"
);
16????????suite.Add(new
?OneTestCase());
17????????suite.Add(new
?Assemblies.AssemblyTests());
18????????suite.Add(new
?AssertionTest());
19????????return
?suite;
20??????}

21????}

22??}

23}
?
24
Category屬性 ?對于測試來說,你有的時候需要將之分類,此屬性正好就是用來解決這個問題的。 ?你可以選擇你需要運行的測試類目錄,也可以選擇除了這些目錄之外的測試都可以運行。在命令行環境里 /include 和/exclude來實現。在GUI環境下,就更簡單了,選擇左邊工作域里的Catagories Tab,選擇Add和Remove既可以了。 在上面的例子上做了一些改善,代碼如下: ?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????????????????????????[Category("Numbers"
)]?
20????????????????????????public?void
?AddTwoNumbers()?
21????????????????????????
{?
22????????????????????????????????????int?sum=a+
b;?
23????????????????????????????????????Assert.AreEqual(sum,3
);?
24????????????????????????}
?
25
????????????????????????
26
????????????????????????[Test]?
27????????????????[Category("Exception"
)]?
28????????????????????????[ExpectedException(typeof
(DivideByZeroException))]?
29????????????????????????public?void
?DivideByZero()?
30????????????????????????
{?
31????????????????????????????????????int?zero?=?0
;?
32????????????????????????????????????int?infinity?=?a/
zero;?
33????????????????????????????????????Assert.Fail("Should?have?gotten?an?exception"
);?
34????????????????????????}
?
35
????????????????????????[Test]?
36????????????????????????[Ignore("Multiplication?is?ignored"
)]?
37????????????????????????[Category("Numbers"
)]?
38????????????????????????public?void
?MultiplyTwoNumbers()?
39????????????????????????
{?
40????????????????????????????????????int?product?=?a?*
?b;?
41????????????????????????????????????Assert.AreEqual(2
,?product);?
42????????????????????????}
?
43
??
44???????????????}
?
45
??????? NUnit-GUI界面如圖5-2: 圖5-2:使用Catagories屬性的界面

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窗口看到下面的輸出: FixtureSetUp
SetUp
Test?
1

TearDown
SetUp
Test?
2
TearDown
FixtureTearDown
?? 可以看到, 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
6)????? NUnit中文文檔:http://www.36sign.com/nunit
? ? Last Updated:2005年6月23日
? Last Updated:2007年4月12日

總結

以上是生活随笔為你收集整理的[转]NUnit详细使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产在线看片 | 成人7777| 无码人妻久久一区二区三区蜜桃 | 日日av| 午夜污污| 亚洲综合第一区 | 9191av| 中国丰满人妻videoshd | 久久伊人久久 | 国产精品福利影院 | 男同激情视频 | 日本www黄 | 成人国产| 亚洲精品小视频在线观看 | 日韩一区二区三区在线视频 | 超碰男人天堂 | 国产一区二区小视频 | 天天草天天草 | 少妇裸体性生交 | 国产色 | 亚洲视频一二三区 | 在线免费亚洲 | 天天狠天天透 | 国产中文久久 | 欧美啪啪小视频 | 午夜精品福利影院 | 亚洲激情视频一区 | 日韩一级生活片 | 亚洲码无人客一区二区三区 | 欧美黄色大片在线观看 | 99视频在线精品 | 贵族女沦为官妓h呻吟 | 经典三级视频 | 亚洲第一在线视频 | 亚洲图片 欧美 | 国产欧美一区在线观看 | 日韩av电影网址 | 激情五月综合色婷婷一区二区 | 亚洲乱码中文字幕 | 久久亚洲精选 | 欧日韩视频| 久久久久久久91 | 国产又黄又猛的视频 | 国产精品扒开腿做爽爽 | 国产成人在线电影 | 日韩第1页 | 国产在线视频导航 | 五月婷婷六月激情 | 成年人黄国产 | 亚洲天堂中文字幕在线 | 日本熟妇一区二区三区四区 | 毛片毛片毛片毛片毛片毛片 | 日本黄图 | 久久久久久久久久久久91 | 国产一区二区三区久久 | 亚洲一区二区三区在线观看视频 | 日韩精品成人一区 | 欧美乱码精品一区二区 | 亚洲第一精品在线观看 | 嫩草影院在线观看视频 | 91麻豆精品国产午夜天堂 | 国产成人精品综合久久久久99 | 99热网| 丰满少妇被猛烈进入 | 视频免费在线观看 | 99在线视频精品 | 精品国产乱码久久久久久预案 | 激情五月av | 老汉色老汉首页av亚洲 | 欧美视频xxx | 国产剧情在线一区 | 欧美日韩免费一区二区 | 香港三级网站 | 中文字幕无码毛片免费看 | 九九九久久久 | www.国产一区二区三区 | 亚洲在线中文字幕 | 日韩欧美精品在线播放 | 成人国产精品久久久网站 | 下面一进一出好爽视频 | 欧美日韩在线不卡 | 亚洲精品日韩在线 | 日本高清免费视频 | 无码h肉动漫在线观看 | 亚洲性xx| 国产欧美一区二区在线观看 | 青青草午夜 | 1024福利| av免费网站在线观看 | 中文欧美日韩 | av先锋影音| 国产绳艺sm调教室论坛 | 黄色一级视频免费看 | 樱桃成人精品视频在线播放 | 天堂av在线免费 | 日韩久久久久久久 | 欧美不卡在线视频 | 毛片网在线 | 久久久久久逼 |