前言: 本文主要是介紹了Nunit的基本使用,其中參詳了很多已有的文章,由於最近要使用其進行測試,所以對網上的文章做了下整理,同時加入了一些自己的實踐。 NUnit的屬性 TestFixture 它標記一個類包含測試,申明該類是用來測試的。一般用在class的定義之前; Test 一般是放在meth ...
前言:
本文主要是介紹了Nunit的基本使用,其中參詳了很多已有的文章,由於最近要使用其進行測試,所以對網上的文章做了下整理,同時加入了一些自己的實踐。
NUnit的屬性
TestFixture
它標記一個類包含測試,申明該類是用來測試的。一般用在class的定義之前;
Test
一般是放在method之前,表示對該方法的測試,中添加Description參數可以給我們測試的功能添加描述信息
TestCase(arguments)
屬性標記有參數無返值方法為測試方法(泛型方法一樣標記),想要多次測試可用逗號隔開([TestCase(1,2), TestCase(2,3)])
TestCaseAttribute還提供一些列其他屬性:
Description:描述測試用例詳情
ExpectedException:指定期望拋出的異常
ExpectedExceptionName:指定期望拋出異常的全名
ExpectedMessage:指定期望拋出異常的信息
Explict:設置為true標記測試用例為顯示執行,用Reason來詮釋緣由
Ignore:設置為true用於指定忽略測試用例,用Reason來詮釋緣由
IgnoreReason:指定忽略測試用例及緣由,等同於同時使用Ignore && Reason。註意:本特性會在以後版本中移除
MatchType:MessageMatch枚舉類型,指定測試期望信息(詳情見ExpectedExceptionAttribute)
Reason:指定不執行測試用例的緣由,結合Ignore或Explicit特性使用
Result:指定測試方法期望的返回值,返回值類型必須是可相容的
TestName:為測試用例指定一個名稱,如果不指定會根據測試方法及參數自動生成。
Explicit
屬性標記測試方法需要在UI界面顯式執行,如果不想對某個方法進行單元測試,只是在它被選中時才進行測試的話,可以調用該特性。
Ignore
屬性標記一個測試方法或一個測試類被忽略,如果測試類被忽略,其內中的測試方法也會被忽略。
ExpectedException(Type)
屬性標記測試方法在運行時拋出一個期望的異常,如果是則測試通過,否則不通過
Category("")
屬性標記用於將測試分類(便於只測試需要的類別),可在方法與類上進行標記,在NUnit-GUI界面的Categories選項卡中對要參與參數的類別進行選擇,Run時僅測試該類別的測試。如果均不選,則預設全部測試
TestFixtureSetUp
屬性標記方法為類級別設置(初始化)方法,在整個測試類中執行一次初始化,所有的測試方法共用初始化數據,標記此屬性的方法可以簡單的將其想象為一個初始化器,就行類的構造函數一樣
TestFixtureTearDown
屬性標記方法為類級別拆卸方法,在整個測試類中執行一次拆卸.當測試類中的所有測試方法執行完成,就會執行拆卸方法,用於清除數據、釋放資源,可以將其想象為一個析夠函數,在測試完成後對測試過程中使用的資源進行回收
TearDown
屬性標記方法為函數級別的拆卸方法,在執行完每個測試方法後,執行該拆卸方法。一個測試類可以僅有一個TearDown/Setup/TestFixtureSetUp/TestFixtureTearDown方法。如果有多個定義,測試類也會編譯成功,但是測試時不會運行這些標記過的方法
SetUp
屬性標記方法為函數級別的設置方法,在執行每個測試方法前,執行該設置方法
[Maxtime]/[Timeout]
屬性標記測試用例的最大執行時間,前者超時時不取消測試,而後者會強行中斷,用法如:[Test, Maxtime(2000)],[Test, Timeout(2000)]。
Repeat
屬性標記測試方法重覆執行多少次,如:[Test, Repeat(5)]。
[RequiresMTA]/[RequiresSTA]/[RequiresThread]
屬性標記測試用例必須的在多線程、單線程、獨立的線程狀態下運行
Values
屬性標記測試用例的參數,以參數的形式傳入一組值,NUnit會把這組值分解成相應數量的子測試。當測試用例的2個參數都使用[Values]進行標記,NUnit預設生成2組數量乘積的用例,需要使用[Sequential]標記測試用例才能按順序生成一一對應的n(n=2組中最大數組長度)個子測試用例
ValueSource
屬性標記測試用例的參數,指定參數的數據源來自哪裡,在使用[ValueSource]指定數據源時,該數據源必須實現了IEnumerable介面,數據源可以是屬性、無參方法、實例或靜態成員
Nunit常用類和方法
1、Assert(斷言):如果斷言失敗,方法將沒有返回,並且報告一個錯誤。
1)、測試二個參數是否相等
Assert.AreEqual;
Assert.AreEqual;
2)、測試二個參數是否引用同一個對象
Assert.AreSame;
Assert.AreNotSame;
3)、測試一個對象是否被一個數組或列表所包含
Assert.Contains;
4)、測試一個對象是否大於另一個對象
Assert.Greater;
5)、測試一個對象是否小於另一個對象
Assert.Less;
6)、類型斷言:
Assert.IsInstanceOfType;
Assert.IsAssignableFrom;
7)、條件測試:
Assert.IsTrue;
Assert.IsFalse;
Assert.IsNull;
Assert.IsNotNull;
Assert.IsNaN;用來判斷指定的值是否為數字。
Assert.IsEmpty;
Assert.IsNotEmpty;
Assert.IsEmpty;
Assert.IsNotEmpty;
8)、其他斷言:
Assert.Fail;方法為你提供了創建一個失敗測試的能力,這個失敗是基於其他方法沒有封裝的測試。對於開發你自己的特定項目的斷言,它也很有用。
Assert.Pass;強行讓測試通過
2、字元串斷言(StringAssert):提供了許多檢驗字元串值的有用的方法
StringAssert.Contains;
StringAssert.StartsWith;
StringAssert.EndsWith;
StringAssert.AreEqualIgnoringCase;
3、CollectionAssert類
CollectionAssert.AllItemsAreInstancesOfType;集合中的各項是否是某某類型的實例
CollectionAssert.AllItemsAreNotNull:集合中的各項均不為空
CollectionAssert.AllItemsAreUnique;集合中的各項唯一
CollectionAssert.AreEqual;兩個集合相等
CollectionAssert.AreEquivalent;兩個集合相當
CollectionAssert.AreNotEqual;兩個集合不相等
CollectionAssert.AreNotEquivalent;兩個集合不相當
CollectionAssert.Contains;
CollectionAssert.DoesNotContain;集合中不包含某對象
CollectionAssert.IsSubsetOf:一個集合是另外一個集合的子集
CollectionAssert.IsNotSubsetOf:一個集合不是另外一個集合的子集
CollectionAssert.IsEmpty;集合為空
CollectionAssert.IsNotEmpty;集合不為空
CollectionAssert.IsOrdered;集合的各項已經排序
4、FileAssert
FileAssert.AreEqual;
FileAssert.AreNotEqual;
5、DirectoryAssert
DirectoryAssert.AreEqual;
DirectoryAssert.AreNotEqual;
DirectoryAssert.IsEmpty;
DirectoryAssert.IsNotEmpty;
DirectoryAssert.IsWithin;
DirectoryAssert.IsNotWithin;
Nunit測試工具下載:
ReSharper集成:
http://www.jetbrains.com/resharper/download/
Nunit工具:
https://github.com/nunit/nunitv2/releases/tag/2.6.4可根據自己的需要進行下載
Nunit工具使用
1.下載解壓後,得到NUnit-2.6.4文件夾,打開文件夾中的bin文件,如下圖:
2.選中nunit.exe發送快捷方式到桌面,雙擊剛發到桌面上“nunit.exe-快捷方式”圖標,進入Nunit工具運行界面,如圖:
3如圖,通過菜單中File的下拉列表中的“Open Project Ctrl+O”項,找到為測試而寫的測試項目的.dll文件(.exe文件也可),添加到NUnit中。
4.下圖便是載入後的展示。直接單價Run按鈕,運行測試代碼。
5.用例測試,完全成功通過的示例圖為:
6.存在測試失敗時,圖示:
7.存在被忽略用例,不存在出錯用例時:
8.混合用例(同時存在忽略用例+出錯用例):
ReSharper使用單元測試
1.以下是一個需要測試的類庫和一個 Nunit測試單元。
2.右鍵 Nunit測試單元,選擇Run Nunit tests即可
3.選擇之後就會看到如下界面:
這個界面的使用和Nunit Ui界面的使用類似,不多講。同時你可能看到有一個Dubug Nunit Tests 選項,他的功能就類似代碼調試,可以逐步調試測試用例調用的過程,記得打斷點。
註意
在測試單元需要引入 這個包,這個包的來源可以在你下載的Nunit工具中找到。
學習資料:
http://www.cnblogs.com/kim01/default.aspx?page=3這個是對官網章節的翻譯,當然你也可以直接去官網查看。
測試項目: