0. 單元測試
單元測試(unit test)的乙個測試用例(test case)是一小段**,用於測試乙個小的程式功能的行為是否正常,保證開發的功能子項能正確完成並實現其基本功能。乙個單元測試是用於判斷某個特定條件下某個特定函式的行為。單元測試是隨功能**一起的乙個配套工具,再配合面向介面程式設計方法和mock技術,大大提高**的可測試性。
·白盒測試:測試單元的內部結構;
·黑盒測試:測試單元的功能和可觀測行為;
1. nunit是什麼
nunit 免費開源 (提供一套單元測試框架(專用於.net的白盒測試架構)和乙個測試執行程式(test runner)。其中,test tunner 用於尋找具有[testfixture]屬性的類和類中的[test]方法。
2. tdd思想
在功能**未完成前,先進行測試**的編寫;測試不應著眼於功能**,應著眼於設計。定義tdd的2個原則:
·除非你有乙個失敗的自動測試,永遠不要寫一單行**;
·阻止重複;
3. 使用nunit
測試原則
·可靠性、可維護性、可讀性;
·盡量避免測試中的邏輯,乙個單元測試應該是一系列的方法呼叫和斷言;
·避免重複**;
·測試隔離,低耦合,防止不同測試之間的互相影響;
nunit屬性testfixture
修飾測試類。類必須為public且必須有乙個預設建構函式。
·test
修飾測試方法。測試方法的返回值必須為void。
·testcase
修飾測試方法。標記方法具有引數並提供測試時需要的引數。
[testcase(引數列表)]
·values
標記作為測試方法的一系列的引數。
·combinatorial
測試時需要測試的各種可能的組合;
[test, combinatorial]
public
void testfunction01( [values(1,2,3)]int val, [values(「you」,」hi」)]string str ) {}
·setup/teardown
修飾方法,測試類初始化/資源釋放函式。每個測試方法被呼叫之前/後執行,用於環境的建立/清理、初始化/釋放資源。屬性從任何的基類繼承而來,被修飾的方法必須為public。
·[testfixturesetup/testfixtureteardown] onetimesetup/onetimeteardown
修飾方法,測試用例初始化/資源釋放函式。任何測試方法被呼叫之前/後執行,類似構造/析構函式,其作用於整個[testfixture]類,包括資料庫連線等,被修飾的方法必須為public。
setup/teardown方法提供達到測試隔離性的目的:setup確保共享的資源在每個測試執行前正確初始化,teardown確保沒有因執行測試產生的遺留***;testfixturesetup/testfixtureteardown同樣提供相同的目的,但是卻在setup/teardown方法之前/後。
·ignore
修飾類或方法,保證測試正常進行的前提下,臨時動態忽略某些測試方法。
[ignore(「提示資訊」)]
·category
修飾類或方法,分類/分組管理測試類或方法;
[category(標籤)]
nunit方法
在nunit中,assert(斷言)是乙個類,斷言是assert類的靜態方法。斷言是單元測試的核心,用類中的各種方法進行比較,也可以在nunit的斷言中新增自己的錯誤資訊。注意以下幾個方法:
·assert.fail():讓測試直接失敗;
·assert.ignore():讓測試被忽略;
·assert.areequal/arenotequal (object expected, object actual):
比較引數expected和actual的值(型別)是否相等;
·assert.istrue/isfalse (bool condition):
條件斷言測試;
·assert.aresame/arenotsame (object expected, object actual):
比較兩個引數是否引用同乙個物件;
另外,還有stringassert類,字串斷言,提供對字串值的測試方法。
如果乙個方法中有多個斷言,某個斷言執行失敗,在其之後的所有斷言都不會執行。具體的,nunit~assert類。
nunit ~ 測試集管理
nunit的很多功能是通過屬性來實現,屬性是在.net元件檔案的metadata中新增的一些可以被其他元件讀取的資訊,用中括號標識。nunit根據測試元件的命名空間及[testfixture]和[test]屬性來分類不同的測試。
·測試分類
·分組執行
nunit ~ demo
[testfixture]
public
class testfunction
[onetimeteardown]
public
void
testfixtureteardown()
[setup]
public
void
setup()
[teardown]
public
void
teardown()
[test]
public
void
testmethod01()
[test]
public
void
testmethod02()
}
測試幾個方法的執行順序:
onetimesetup -> setup -> testmethod01 -> teardown -> setup -> testmethod02 -> teardown -> onetimeteardown
此處可以結合不足之處的第2點理解。
nunit ~ 單步除錯
不足之處
1. xunit體系中junit是在測試每個方法時新生成乙個例項,而nunit中是乙個testfixture只生成乙個例項。如果對包含單元測試類中的例項資料進行更改可能會影響到其它的測試方法,而junit每次都生成乙個例項則不會產生這種情況。
2. junit中[setup]/[teardown]只會在所有測試前、後分別執行一次,而nunit是在每個測試前、後都會執行一次,為了達到junit中[setup]/[teardown]的效果,能新增[testfixturesetup]/[testfixtureteardown]屬性。
參考鏈結
[1]. 單元測試之道(使用nunit)
[2]. 用nunit在單元測試中實現建構函式依賴注入
[3]. nunit單元測試教程以及mock測試
C NUnit單元測試
單元測試 unit test 的乙個測試用例 test case 是一小段 用於測試乙個小的程式功能的行為是否正常,保證開發的功能子項能正確完成並實現其基本功能。乙個單元測試是用於判斷某個特定條件下某個特定函式的行為。單元測試是隨功能 一起的乙個配套工具,再配合面向介面程式設計方法和mock技術,大...
單元測試 單元測試文章收藏
前言 前段時間公司計畫做自動化測試,自己也打算圍繞幾個點做相關調研,現在想想呢?其實對自動化測試的概念都還不是十分清晰,當時主要還是圍繞 單元測試 向qa小夥伴學習了一段時間,現由於公司重組,學習中斷,這裡簡單記錄一些單元測試好文,留待後續參考.什麼叫自動化測試?自動化測試覆蓋率?覆蓋率如何做到的?...
單元測試之Django單元測試
每個應用,自帶tests.py 整合在django的專案檔案裡,更多是開發人員寫django自動的測試執行 3.1 前後置方法執行特點 django.test.testcase類主要由前 後置處理方法和test開頭的方法組成 特點 繼承於django.test.testcase 測試用例都是test...