C#_在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/
相關文章
- 在C#中進行單元測試C#
- 在Hadoop中使用MRUnit進行單元測試Hadoop
- 使用JUnit進行單元測試
- 使用Jest進行React單元測試React
- Jest & enzyme 進行react單元測試React
- 使用 Spring 進行單元測試Spring
- 使用 QUnit 進行 JavaScript 單元測試JavaScript
- [譯]對 React 元件進行單元測試React元件
- 使用 Spring Boot 進行單元測試Spring Boot
- 利用HSQLDB 進行Hibernate單元測試SQL
- JavaScript 測試教程-part 1:用 Jest 進行單元測試JavaScript
- symfony2 用phpunit進行單元測試PHP
- 如何對非同步呼叫進行單元測試非同步
- 如何對第一個Vue.js元件進行單元測試 (下)Vue.js元件
- 使用Angular CLI進行單元測試和E2E測試Angular
- Python中的單元測試框架:使用unittest進行有效測試Python框架
- go 單元測試進階篇Go
- 在單元測試中使用EasyMockMock
- FastAPI(43)- 基於 pytest + requests 進行單元測試ASTAPI
- 使用xUnit為.net core程式進行單元測試(4)
- 使用xUnit為.net core程式進行單元測試(3)
- 使用xUnit為.net core程式進行單元測試 -- Assert
- 使用xUnit為.net core程式進行單元測試(1)
- jmock 進行單元測試的一些疑問Mock
- 測試 之Java單元測試、Android單元測試JavaAndroid
- 在Eclipse中使用JUnit4進行單元測試(圖文教程一)Eclipse
- 在Eclipse中使用JUnit4進行單元測試(0基礎篇)Eclipse
- 單元測試:單元測試中的mockMock
- 前端進階課程之單元測試前端
- 測試開發之單元測試-禪道結合ZTF驅動單元測試執行
- 首次在WebAPI中寫單元測試WebAPI
- Golang 學習——基於 Gin 框架進行 httptest 單元測試Golang框架HTTP
- 使用SAP CRM mock框架進行單元測試的設計Mock框架
- 使用FakeAsync對Angular非同步程式碼進行單元測試Angular非同步
- 如果利用 python 對 java 程式碼進行 單元測試?PythonJava
- 用 Mocha 和 Chai 對 JavaScript 程式碼進行單元測試AIJavaScript
- 如何執行指定的單元測試
- 對圖資料庫(Nebula)進行單元測試時的坑資料庫