VS2010中的單元測試



在VS2010中,單元測試的功能很強大,使得建立單元測試和編寫單元測試代碼,以及管理和運行單元測試都變得簡單起來,通過私有訪問器可以對私有方法也能進行單元測試,並且支持數據驅動的單元測試。

1、建立單元測試項目

1.1、從被測試代碼生成單元測試

1)實例:創建VC#模式下的控制檯應用程序,工程名爲CUnitTest

2)輸入簡單的加、減、乘、除函數代碼,如下圖所示

3)可按如下步驟建立單元測試

    (1)在Add方法體內,單擊鼠標右鍵,在菜單中選擇"創建單元測試",

(2)在出現的"創建單元測試"界面中,Add方法被自動勾上,表示要爲這個方法創建單元測試代碼的基本框架,單擊確定按鈕

(3)點擊確定後,在新建測試項目中,輸入需要創建的單元測試的新項目的名稱,然後單擊"創建"按鈕,則自動創建一個新的單元測試代碼項目。

(4)在"解決檔案資源管理器"中可以看到多了一個"AddTest"項目,可以看出"AddTest"項目引用了被測項目的程序集,和單元測試框架Microsoft.VisualStudio.QualityTools.UnitTestFrame,並且自動產生兩個C#代碼文件AssemblyInfo.cs和ProgramTest.cs

(5)ProgramTest.cs的代碼如下圖所示,從圖中可以看到,自動產生了一個"ProgramTest"類,並使用[TestClass()]標識爲一個單元測試類,以及一個"AddTest"測試方法,。並用[TestMethod()]標識。

(6)ProgramTest.cs代碼文件詳講

[TestMethod()]:說明了以下代碼是一個測試用例

Int a = o; // TODO: 初始化爲適當的值

int b = 0; // TODO: 初始化爲適當的值

這兩句是被測函數的輸入參數,需要我們去修改它的值,也就是我們輸入測試用例的地方。

double expected = 0; // TODO: 初始化爲適當的值

double actual;

      這兩句話淺顯易懂,前一句話是定義了期望值和對它進行初始化,後一句話是定義了實際值。默認

Assert.AreEqual(expected, actual);

Assert在這裏可以理解成斷言:在VSTS裏做單元測試是基於斷言的測試。

默認代碼中Assert.Inconclusive 表明這是一個未經驗證的單元測試。在實際的程序中可以註釋掉。

1.2、添加單元測試項目

(1)另外一種單元測試方法是獨立添加單元測試項目,在解決方案中添加一個新的項目,選擇項目類型爲"測試項目",

(2)單擊確定後,自動產生一個新的單元測試項目,在"解決方案資源管理器"中可看到新添加的測試項目"TestProject2"。對比"TestProject2"和"AddTest"可發現,"TestProject2"少了對被測試項目程序集的引用,僅僅引用了單元測試框架的DLL"Microsoft.VisualStudio.QualityTools.UnitTestFrame"

 

2、編寫測試方法

單元測試的基本方法是調用被測代碼的函數,輸入函數的參數值,獲取返回結果,然後與預期測試結果進行比較,如果相等則認爲測試通過,否則認爲測試不通過。

1、Assert類的使用

Assert.Inconclusive()    表示一個未驗證的測試;

Assert.AreEqual()         測試指定的值是否相等,如果相等,則測試通過;

AreSame()            用於驗證指定的兩個對象變量是指向相同的對象,否則認爲是錯誤

AreNotSame()        用於驗證指定的兩個對象變量是指向不同的對象,否則認爲是錯誤

Assert.IsTrue()              測試指定的條件是否爲True,如果爲True,則測試通過;

Assert.IsFalse()             測試指定的條件是否爲False,如果爲False,則測試通過;

Assert.IsNull()               測試指定的對象是否爲空引用,如果爲空,則測試通過;

Assert.IsNotNull()          測試指定的對象是否爲非空,如果不爲空,則測試通過;

2、CollectionAssert類的使用

用於驗證對象集合是否滿足條件

StringAssert類的使用

用於比較字符串。

StringAssert.Contains

StringAssert.Matches

StringAssert.tartWith

 

3、數據驅動的單元測試

數據驅動的單元測試是指單元測試的輸入數據遍歷一個數據源的所有行。從數據源的沒一行讀入數據並傳入給測試方法使用

3.1、ACCESS數據驅動單元測試

1)打開測試視圖窗口,選擇測試視圖

2)在測試視圖窗口中選擇需要配置成數據驅動方式的單元測試方法,然後按F4,打開單元測試的屬性窗口

3)編輯"數據連接字符串"屬性,在"屬性"窗口中單擊該屬性,然後單擊省略號 (…)。這將打開"選擇數據源"對話框,其中列出了若干個可能的數據源,包括 ODBC、Microsoft SQL Server 和 Microsoft Access。選擇一個數據源後將打開一個特定於該數據源類型的對話框;可以使用此對話框配置該數據源的連接屬性。配置完數據連接後,連接字符串會作爲"數據連接字符串"的值出現。此字符串還會作爲單元測試方法的一個屬性存儲起來

4)在這個界面中,選擇一個Acess表data.mdb,單擊"確定"按鈕完成設置,回到"單元測試屬性"窗口。可以看到數據源的已經設置好。

5)在建立與數據源的連接之後,可以選擇一個數據表。當您單擊"屬性"窗口的值列中的下拉列表時,將會列出所連接的數據庫中的表。從此列表中選擇的表就是在運行單元測試時將檢索其中的行的表。與"數據連接字符串"等其他屬性一樣,"數據表名稱"也會作爲單元測試方法的一個屬性存儲起來。

6)在"數據訪問方法",請選擇"順序"或"隨機";默認值爲"順序"。此設置表示從數據源的表中檢索記錄的順序。

    可以看到,在測試方法前面已經添加了一行:

7)數據源的使用

通過 TestContext 類的 DataRow 和 DataConnection 屬性將數據提供給正在運行的單元測試。下面爲使用TestContext 類的 DataRow屬性來讀入數據行

8)Acess數據源中的表爲

3.2、讀取Excel的方法:

1)在桌面新建一個txt文件,更改文件名爲data.dsn

2)選中"數據庫連接字符串",單擊右邊列的按鈕,更改數據源爲Microsoft ODBC數據源,點擊"確定"按鈕

3)選擇使用連接字符串,點擊生成

4)選擇Excel數據源的驅動程序,點擊"下一步"

5)選擇data.dsn爲數據源保存文件,一直選擇"下一步"。

6)在彈出的選擇工作簿中,選擇用例的輸入文件data.txt,點擊"確定"

7)選擇用例所在的Sheet頁,選擇"完成"

8)數據源的使用代碼

4、單元測試的運行

單元測試的運行有兩種方式:調試和運行。可以像調試普通代碼一樣對單元測試代碼進行調試,當然也可以直接運行,單元測試的結果將在"測試結果"界面中展示,雙擊測試結果,可以得到測試結果的詳細信息。單元測試的代碼覆蓋率可以在"代碼覆蓋率結果"界面中展示。

5、附加測試屬性

"附加測試屬性"。默認都是被註釋掉的,只要我們取消註釋就可以使用了。這個功能的加入,很大程度上是爲了增加測試的靈活性。具體的屬性有:

[ClassInitialize()]在運行類的第一個測試前先運行代碼

[ClassCleanup()]在運行完類中的所有測試後再運行代碼

[TestInitialize()]在運行每個測試前先運行代碼

[TestCleanup()]在運行完每個測試後運行代碼

如在執行測試時,將測試執行時間輸入到日誌中,代碼如下


轉自:http://zxianf.blog.163.com/blog/static/30120701201101011757499/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章