.net持續集成單元測試篇之單元測試簡介以及在visual studio中配置Nunit使用環境

系列目錄html

單元測試及測試驅動開發簡介

什麼是單元測試

單元測試是一段自動化的代碼,這段代碼調用被測試的工做單元,以後對這個單元的單個最終結果的某些假設進行檢驗。單元測試幾乎都是用單元測試框架編寫的。單元測試容易編寫,能快速運行。單元測試可靠、可讀、而且可維護。只要產品代碼不發生變化,單元測試的結果是穩定的。數據庫

特徵windows

• 自動化、可重複執行;瀏覽器

• 很容易實現;網絡

• 次日還有意義;架構

• 任何人都應該能一鍵運行它;框架

• 運行速度應該很快;編輯器

• 結果應該是穩定的;工具

• 能徹底控制被測試的單元;佈局

• 徹底隔離(獨立於其餘測試的運行);

單元測試命名

因爲單元測試很是強調可讀性,所以咱們要花些功夫在命名上,要使單元測試方法名簡單易懂,基本一會兒能看出它的主要功能.若是以爲方法名不可以徹底表達出此方法要實現的功能,也能夠額外添加註釋.推薦的命名方式以下
Should_Return(Throw)_Result(exception)_If(when)But

其中Should表示期待一個結果,Return或者Throw爲要測試方法期待的返回結果,If表示出現以上結果須要的條件,But爲附加條件.

什麼是集成測試

集成測試是對一個工做單元進行的測試,這個測試對被測試的工做單元沒有徹底的控制,並使用該單元的一個或多個真實依賴物,例如時間,網絡、數據庫、線程或隨機數產生器等。

單元測試與集成測試的區別

單元測試與集成測試最大的區別在於:集成測試依賴於一個或多個真實的模塊,當運行集成測試時,出現失敗的狀況後你並不能當即判斷是哪裏出了問題,所以找到缺陷的根源會比較困難。

Avatar

測試驅動開發

傳統開發流程

[虛線表明是一個可選的行爲]

Avatar

TDD開發流程

Avatar

由上面的兩個圖中能夠看出TDD與傳統開發模式的區別:先編寫一個會失敗的測試,而後建立產品代碼,並確保這個測試經過,接下來是重構代碼或者建立另外一個會失敗的測試。

單元測試框架做用

單元測試框架是幫助開發人員進行單元測試的代碼庫和模塊。

Nunit單元測試框架使用

NUnit 是一套開源的基於.NET平臺的類Xunit白盒測試架構,支持全部的.NET平臺。這套架構的特色是開源,使用方便,功能齊全。很適合做爲.NET語言開發的產品模塊的白盒測試框架。
起初是從流行的Java單元測試框架JUnit直接移植過來的,以後NUnit在設計和可用性上作了極大地改進,和JUnit有了很大的區別,給突飛猛進的測試框架生態系統注入了新的活力。
如何在VS安裝並運行呢?用Nuget是最方便的一種形式了,以下圖:

Avatar
若是各位的visualStudio中安裝有Resharper插件,則只須要安裝紅色部分框選的內容便可,若是沒有安裝也沒有關係,可使用VisualStudio自帶的測試工具也是能夠的,
如下講解用的也是VisualStudio自帶的測試工具.
須要注意的是若是使用VisualStudio自帶的測試工具,還須要安裝Nunit.Console

編寫第一個單元測試

咱們在剛纔新建的項目中添加一個名爲FirstUnitTest的項目
咱們要引入using NUnit.Framework;方可以使用Nunit
咱們新建的第一個測試代碼以下
Avatar
其中TestFixture註解標識這個類爲單元測試類,若是沒有此標識,則此類沒法在單元測試工具中運行
方法上的Test註解標註此方法爲一個單元測試方法,若是沒有Test註解,則此方法在單元測試運行的時候將會被忽略掉
類註解和方法註解添加之後,單元測試就能夠跑起來了.

運行第一個單元測試

使用VisualStudio自帶單元測試工具運行

Avatar
如上圖示,點擊菜單欄的Test(測試)-Windows(窗口)-Test Explorer(測試瀏覽器)即可以在VisualStudio中打開測試瀏覽器,只要咱們保存了項目,就能夠在Test Explorer中看到剛纔建立的單元測試了(剛建立的單元測試名爲FirstUnitTest)
運行單元測試,咱們點擊Test Explorer中FirstUnitTest下的測試方法名,出現如下選項
Avatar
咱們點擊Run Selected Test(運行選中的單元測試)即可以運行這個單元測試了

Avatar

運行之後即可以在Test Explorer中看到結果了
單元測試圖標含義
單元測試結果很容易根據圖標看出來其含義,其中圓圈內一個紅色X 號表明測試失敗,須要處理,圓圈裏一個綠色對勾 表明測試成功,菱形內一個藍底! 號表明測試結果待定(單元測試沒有運行的狀態是待定)
除了這幾個狀態外還有一種狀態是三角形內一個黃底感嘆號 ,表明警示,後面會介紹這個狀態.

單元測試狀態查看

經過以上狀態咱們很清析地看到咱們建立的單元測試失敗了,咱們點擊這個單元測試,Test Explorer下面部分便會顯示關於此次測試的基本信息
Avatar
咱們從錯誤信息裏能夠看到錯誤緣由是期待的結果True,其實是False.若是測試過程當中因爲異常致使錯誤,StackTrace還會顯示異常的堆棧信息.

小技巧-快速定位到錯誤方法:在實際工做中,隨意項目的深刻,測試方法會愈來愈多,咱們寫完一個測試方法後而後點擊測試,這樣不會有什麼問題,而後實際狀況是隨着測試方法積累愈來愈多,咱們往後要運行單元測試的時候每每是點擊整個單元測試項目運行,這時候若是有錯誤咱們雖然能夠根據方法名定位到出錯的測試方法,然而這樣很不方便,咱們這時候能夠點擊錯誤信息欄裏的Source後面的藍色文字,快速定位到測試出現錯誤的方法.
Avatar

不少時候咱們只是查看一下這個面板,並不把鼠標移過來點擊,更爲快捷的定位到錯誤方法的的方式是咱們選中測試方法後,直接按下快捷鍵F12,就直接進入到錯誤方法了

Avatar

上面的面板中展現有錯誤的信息,若是信息過長時在面板查看很不方便,這時候咱們能夠把它複製下來而後在本身喜歡的文本查看器中查看

Avatar

單元測試調試

經過以上狀態咱們知道咱們的單元測試失敗了,爲何會失敗很簡單3+4*5/2不等於0,可是不少時候有些結果不是這麼顯而易見的,咱們須要藉助單步調試來發現錯誤,如何對單元測試進行調試呢?
首先咱們像普通調試同樣設置一個斷點,而後在Test Explorer中右擊方法名,出現彈出菜單,此次咱們選擇Debug Select Tests(調試選擇測試)

Avatar

此時咱們會看到像咱們普通調試同樣,斷點被擊中

Avatar
咱們能夠在斷點調試模式發現錯誤所在.
這裏還有一點須要指出的是,單元測試的成功失敗狀態只是針對本次有效,若是關閉VisualStudio全部的狀態又會變成待定狀態,須要再次運行測試纔會有成功,失敗等狀態.

使用Resharper運行單元測試

Resharper爲VisualStudio的一個插件,集成了不少功能,其中包含單元測試運行功能.若是你的VisualStudio裏安裝的Resharper插件,也可使用Resharper來運行單元測試,使用Resharper來進行測試測試比使用VisualStudio自帶的單元測試工具更爲方便.
若是安裝了Resharper,VisualStudio的主菜單裏會出現Resharper菜單,執行如下圖示操做即可以打開Resharper Unit Test Explorer

Avatar

窗口和VisualStudio Test Explorer相似

Avatar

操做也和VisualStudio自帶的Test Explorer操做相似,點擊剛纔新建立的FirstUnitTest類,便會出現如下菜單

Avatar

選擇第一個Run Unit Test便會運行單元測試,點擊Debug Unit Tests則會進入單元測試調試模式,和VisualStudio自帶的測試工具操做相似.

Avatar

執行結果狀態圖標和Visual Studio自帶的測試工具狀態圖標大同小異,很容易區分
一點很大的不一樣在於它的單元測試信息顯示在右邊,這樣若是面板的寬度太小而錯誤信息過長就會出現以下圖示狀況

Avatar

基本上不可讀

Avatar

咱們能夠經過如圖示設置把它調到下面,這樣就和VisualStudio自帶的單元測試工具佈局基本同樣了

Avatar

一樣能夠點擊藍色或者青色文字快速導航到錯誤方法裏.
一樣,因爲面板大小限制,若是錯誤內容信息過豐富查看起來不是很方便,VisualStudio自帶的測試工具能夠經過Copy All複製到剪切板,然而這個面板並無,沒有辦法把錯誤記錄複製出來嗎,答案是有的.
咱們右擊方法名,便會出現下面一個級聯菜單

Avatar

這裏有導出Text,XML和HTML,導出到xml和html基本上不須要,只須要導出爲Text便可,點擊Export to Text出現以下對話框

Avatar

若是咱們選擇一個路徑便會將錯誤導出,不少時候並不須要這麼作,咱們點擊Copy to Clipborard把內容複製到剪輯板,即可以把它複製到本身喜歡的文本編輯器裏查看了

Resharper測試技巧-狀態過濾

當測試愈來愈多的時候,咱們每每對整個測試項目進行運行,而不是像在開發階段寫一個運行一個,有人可能會有疑問,單元測試寫的時候測試經過,之後再測會變成不經過狀態嗎,答案是確定的.若是咱們的單元測試中包含外部依賴(理想狀態下不該該包含),每每外部依賴的變化會致使單元測試結果的變化.另外,單元測試編寫的不恰當也會引發測試結果的變化.外部依賴的變化每每因爲項目自己緣由耦合度過高,一時又沒法重構但仍然須要單元測試,這時候也能夠勉強爲之,然而不恰當的測試代碼致使結果的不穩定是須要避免的.(最爲常見的是日期中使用DateTime.Now因爲Datetime.Now是變化的致使單元測試結果不可預測,這種狀況是須要避免的.)
以上穿插的內容只是爲了說明特定狀況下單元測試的結果是會變的,所以不覺得編寫完測試方法後運行一遍成功就萬事大吉.

若是測試方法不少,運行完之後出現多處錯誤,此時想要一個個找出失敗的單元測試不是很方便,此時咱們能夠藉助Resharper Unit Test Explorer中的測試狀態過濾功能來過濾出全部的錯誤測試.

Avatar

如上圖,咱們點擊上面工具欄裏的錯誤圖標,這時候Explorer裏列出的所有都是錯誤測試.
須要注意的是,因爲咱們啓用的過濾,一旦錯誤都解決之後,這裏便沒有錯誤測試可羅列,這時候這裏變成一片空白,咱們須要點擊一下最左邊全部測試圖標把全部測試都顯示出來

Avatar

Resharper測試技巧之類內部啓用測試

如今的測試還比較少,咱們在Test Explorer中找到剛剛編寫好的單元測試方法並非一件很困難的事,可是當Explorer裏單元測試方法愈來愈多的時候,想要快速找到剛編寫好的方法啓動是一件很是繁瑣的事,
咱們每每須要把方法名複製下來,而後粘貼到Explorer(這裏的Explorer根據語境指的是Resharper Unit Test Explorer或者VisualStudio Test Explorer,並不是windows explorer或者其它)裏面,啓動後還要刪除查找內容,若是不刪除則其它的方法都沒法展現出來了.Resharper提供了一些很是貼心的簡便功能,能夠直接在類內部直接啓動單元測試,而不須要到Explorer裏找到測試方法而後運行.

Avatar

如上圖示.當一個方法有了Test註解,Resharper便能感知它,這時候方法的前面出現一個如上圖紅框框選的陰陽圖標
點擊圖標便會出現如下上下文菜單

Avatar

點擊Run即可以運行測試.

Avatar

運行成功這時候陰陽圖標右下角會有一個綠色小對勾指示測試成功

若是點擊類名前面的雙陰陽圖標則會整個類的全部測試方法進行操做

Avatar

這時的Run和Debug後面都有一個All字,表示對此類的全部方法運行測試或者調試.

相關文章
相關標籤/搜索