VS 2012 的 Unit Test 和 測試總管

VS 2012 的 Unit Test 和 測試總管

 

資訊導向的測試總管

 

這次 VS 2012 我想最大的改變就是 可以支援各種不同的 Unit Test Framework  以及 內建 Fake 機制

 

以前若是想要在 VS 中整合介面和 Team Build 就變成一定要用 MS Test Framework 

 

現在您可以自行選擇 NUnit 或是 xUnit 之類的套件在您的專案當中

 

而且這次的測試總管也完全以「資訊為主」可以在一個地方呈現最重要的資訊

 

而不需要再一直切換介面

 

image

失敗的測試清單 以及 執行 UT 的時間 ,這對於我們來說已經是很足夠了

 

可以看到 全新增加了「測試總管」全部執行後會「自動搜尋」出符合要測試的項目

 

並且預設以「錯誤」為主的清單來呈現 ( 因為有錯誤才需要我們來看,沒有錯的話就不用理它們啦 )

 

點選錯誤項目後也不會再像以前會另外開新的頁面,現在則是直接在下面的列出訊息

 

以前只會跟你講說 UT 那一行掛掉,現在就直接跟您說是那一行掛掉

 

看到這裡是不是很貼心?點兩下就搞定!不用再自已進去找了

 

 

持續反覆的單元測試和涵蓋率

 

image

當我們習慣了 Unit Test 之後,你不由自主地就會執行一下看看有沒有錯誤

 

但 Unit Test 增加到上百個的時候,你就不會想要每次改一個小地方都全部重新測試

 

因為這實在是沒有什麼太大的意義,而且也是浪費自已的時間

 

在 VS 2010 中原本就只會幫你勾選測試失敗的清單

 

但說真的,畢竟不太「直覺」

 

這次變更成幾個選項,可以讓我們依不同的情況來選擇適合的測試清單

 

而且這有個非常大的好處就是可以讓我們 Focus 在已知的錯誤中

 

另外,分析程式碼涵蓋範圍的機制也有改變了,變成要執行分析後才會真正開始做

 

重點是也不需去做任何的設定 ( VS 2010 要先設定好才會正常運作 )

 

 

想要每次編譯後就自動執行 UT ?

 

那麼請開啟「建置之後執行測試」這個項目

image

接下來只要編譯完成後就會自動執行 UT

 

建立 Fake 組件

 

一開始也有提到這次 VS 2012 內建了 Fake 機制 ,簡單來說就是可以用假的資料,替換掉 某一個 Method 回傳的值

 

而 VS 2012 除了 自已的 Class 外,也可以產生 .NET Framework 的 Fake Class

 

image

程式的部分是標準的 三層式架構有分 Ctrl , BLL , DAL

 

上面的單元測試是針對 Ctrl 層的 Login 進行測試

 

這次會發生錯誤是因為資料庫的資料有被異動而導致 Assert 不一致的錯誤

 

若不是 「資料庫的初始化資料」又不想要受到 資料影響測試案例的話。 ( 這兩個條件必須同時成立 )

 

就可以考慮用 Fake 組件,只要 2 行就可以將 DB 隔離

 

image

因為我只要隔離 資料庫 ,所以只要針對 DAL 產生  Fakes 組件就可以

 

image

完成後就會自動出現 Fakes 資料夾

 

image

由於只會用到 DAL 的 GetEmployee ,所以等會只要針對這個 Method 處理 Fake 資料就好

 

image

由於我們的測試案例不變,依然是針對 Ctrl 進行單元測試。只是希望 Ctrl 層透過 BLL 層取得 Fake 資料

 

所以只要在 Login 之前跟 DAL.GetEmployee 講說要塞假的資料進去即可

 

Fake 機制會自動依 EmployeeDAL Class 產生對應的 Fake 程式,只要加上這行後

 

原本 Ctrl –>BLL –> DAL 的 GetEmployee 就會換成假的 ( 該 DAL 的其他 Method 都是真的 )

 

再跑一次 UT 就可以看到 LoginTest 已經通過了 微笑 

 

 

為什麼它可以更換?最主是透過 Delegate 機制來達成的

 

另外,為了不影響其他程式,要把產生 Fake 的程式用 using (ShimsContext.Create()) 限定範圍

 

以確保只有這一段程式會用到 Fake 資料。

 

若是對於 Func 語法有興趣的朋友也可以參考 MSDN 裡面有一些範例可以縮短學習的時間

 

 

和 VS 2010 相容 UT 專案

 

image

在 VS 2010 以前都會分別產生 負責測試的 vsmdi 和 測試相關設定的 testRunConfig 檔案

 

大家都知道 VS 2012 這次就算升級後,也是可以讓 VS 2010 同時編輯

 

雖然這兩個檔案在這次 VS 2012 中就用不到了,但若您想要讓 VS 2010 也可以編輯的話

 

這兩個檔案就請保留著,就可以讓 VS 2010 專案中持續地做 UT

 

當然若您用了 NUnit 、xUnit 這種非 MS Unit Test Framework 的話,在 VS 2010 是不能直接套的

 

image

在 Test Result 中也和以前不太一樣了,除了原本的 Test Result 目錄外,還增加了 UTE Test DB

 

 

 

參考資料

 

快速入門: 測試驅動開發與測試總管

http://msdn.microsoft.com/zh-tw/library/hh212233(v=vs.110)

從 Visual Studio 2010年升級單元測試

http://msdn.microsoft.com/zh-tw/library/hh507838(v=vs.110)

使用單元測試驗證程式碼

http://msdn.microsoft.com/zh-tw/library/dd264975(v=vs.110)

若要隔離在單元測試方法中的虛擬函式呼叫使用虛設常式

http://msdn.microsoft.com/zh-tw/library/hh549174(v=vs.110)#bkmk_stub_basics

若要隔離在單元測試方法中的非虛擬函式呼叫使用的相容性修正

http://msdn.microsoft.com/zh-tw/library/hh549176(v=vs.110)

程式碼產生、 編譯和 Microsoft Fakes 中的命名慣例

http://msdn.microsoft.com/zh-tw/library/hh708916(v=vs.110)

Visual Studio Fakes Part 2 - Shims

http://www.peterprovost.org/blog/2012/04/25/visual-studio-11-fakes-part-2