使用NUnit做單元測試(總結版)

2021-09-07 21:50:46 字數 2935 閱讀 3926

【按:有關於nunit的詳細介紹請見:《nunit2.0詳細使用方法 》 本文是個人心得和簡要總結】

二、什麼單元測試

單元測試,就是區域性測試,對於web應用程式或者windows應用程式來說,都是由很多「區域性」組成的。如果是乙個具體的web page,那麼可以通常執行、瀏覽頁面看到具體的結果,但是如果是乙個類,測試起來可能就會有一些麻煩,尤其是在類反覆繼承之後,想要檢視程式執行過程中某個類的具體實現結果和實現過程,往往就不那麼容易了。

vs ide當中包含除錯(debug)和跟蹤(trace)的功能,但是它們也有一些侷限,往往都是要對程式的整體進行測試,通過層層呼叫才能執行到某個類。

所以使用單元測試對區域性進行測試就會有更好的結果了。

使用單元測試可以很輕鬆的實現:

靜態類測試

靜態方法測試

類的例項化測試

類的方法測試

三、什麼是nunit?

單元測試通過有兩種辦法:乙個是微軟在vs提供的單元測試,另乙個是nunit,前者可能更複雜也更全面(我只實踐過一次,發現複雜是肯定有的),後者更簡潔明瞭。

五、nunit的啟動

有兩種方法,乙個是單獨啟動(通過開始選單快捷方式),這個時候需要指定已經編譯好的dll路徑;另乙個是整合在vs中啟動。

後者適合單獨開發類庫的時候使用,否則,在乙個解決方案中既有類庫,也有web應用程式,還得反覆切換「啟動專案」。

單獨啟動的時候,指定好已經編譯的dll,按下"run"按鈕,測試成功就會以綠色方式顯示,失敗就會顯示紅色,黃的部分則是通過category指令跳過。

六、最簡單使用

◆在專案(庫類)中新增nunit的引用。

nunit.framework 有針對 .net framwork 1.1和2.0兩個版本,引用的時候需要注意

◆新建乙個類

需要說明的是 

i)nunit通過建立這個類的例項,和執行這個例項的方法來完成測試。它和原始的、想測試的目標類,並不相同。假如寫好乙個類classa,想要對classa進行測試,那麼現在新建的這個類就是test_for_classa

ii)為了便於敘述,文中使用命名約定:「原始類」和「測試類」

◆並且使用using指令把"nunit.framework;"命名空間包含進來

注意大小寫,在新增引用的時候是全小寫的,但是命名空間卻不是。

◆在類名稱前面加上指令:[testfixturesetup],這個類必須是public

◆新增乙個public void 方法,在這個方法前面加上 [test]指令。後文管這種方法叫做「測試方法」

◆ shift+f6或者f6生成

◆通過開始選單快捷方式啟動nunit

◆通過「檔案」選單》「開啟」,瀏覽並找到剛才生成的dll

◆按下run按鈕,nunit顯示綠色的進度條,表明測試成功。

以上就是nunit的最簡單使用,這裡其實什麼也沒有測試,只是演練一下nunit這個單元測試工具的使用。下面進一步介紹nunit的使用方法。

七、驗證設計的功能是否實現

7.1基本的測試

◆例如:類的例項化

新建乙個測試類,新增乙個「測試方法」,在這個方法中新增原始類的例項化**,這時候可以使用各種建構函式,例如(這裡使用範例**不能執行):

class a  = new class();

class b = new class("abc");

使用nunit測試。如果「測試方法」測試通過顯示綠色的進度條,那就證明類的建構函式通過了測試。

◆例如:類的void方法

在「測試方法」中例項化原始類,然後再運執行相應的方法,例如(這裡使用範例**不能執行):

class a = new class();

a.go();

7.2詳細測試:斷言

以上的測試都是簡單的驗證原始類的某些**執行過程中是否出現異常。對於複雜的類來說,這些遠遠不夠,對於原始類的屬性和有返回值的方法可以使用nunit提供的assert(斷言)來測試。例如:

原始類:

public class tag

public void prase(string str)

}測試類:

[testfixture]

public class testtag

}nunit在測試的時候,就會比較t.count是否和1相等,相等則通過測試,並且通過綠色表示出來。

需要說明的是,assert.areequal只是針對值型別判斷是否相等。其它的斷言,請檢視中文幫助:

還有一些情況不能通過異常和或者斷言來判斷,那麼有兩個選擇:

a 自己在測試類當中寫私有的類業判斷

b 在控制台中輸出相關的資訊。

八、setup/teardown 指令

簡單說,就是多個測試中包含的「重合」的**,可以放到[setup]指令指導定的**當中。每個[test]方法都會在執行之前先執行[setup]執行結束再執行[teardown]。

九、testfixturesetup/testfixtureteardown 指令

這一組指令和前面的指令類似,但是又有些不同,主要的區別在於,這一組指令通常用來開啟、釋放某些共同的資源(例如資料庫連線)

十、category指令

跳過的測試

十一、explicit指令

在7.1中是驗證**能否正常執行,如果不出現異常那麼就通過測試了。在這裡explicit指令是故意驗證,**當中會不會出現某一具體的異常。

十二、輸出

根據測試的需要,可以在nunit測試的過程種在控制台輸出測試類中指定的資訊。

能過在nunit工具的「text output」選項卡可以看到測試過程中輸出的資訊。

例如:[testfixturesetup]

public void init()

ps:關於輸出,我封裝了乙個類testbase,除了輸出文字以外,還可以輸出datatable的內容。具體請見下面的鏈結。

流浪是注定的宿命;

漂泊是無盡的輪迴。

引用自 : 

單元測試 NUnit

本內容摘自 單元測試之道c 版 使用nunit 編寫目的 供日後參考學習,好記心不如爛筆頭。基本語法 1 單元測試 斷言 assert 方法 areequals assert.areequals expected,actual string message 這是使用最多的斷言形式,expected ...

單元測試NUnit

在vs中新建的專案中加入nunit.framework的引用。或許我們可以這麼做測試,但顯然不專業。我們新建乙個類叫calculatortest,雖然名字可以隨意起,但是最好這麼叫,比較明顯。注意,這裡的測試方法必須是public void,且沒有引數的,方法名字可以隨意取。而且注意這裡判斷採用的a...

NUnit單元測試使用例項

1.新建.net專案 類庫 2.新增引用 nunit.framework.dll 3.編寫測試用例 test case using system using system.collections.generic using system.text using nunit.framework name...