如何利用 PEX 讓 VS 2010 可以自動產生 Unit Test ( MSDN 專用 )

如何利用 PEX 讓 VS 2010 可以自動產生 Unit Test ( MSDN 專用 )

以前我們的程式邏輯越來越複雜時,或是有許多判斷條件時

 

Unit Test 就要寫多種不同的條件,才能得到完整的測試

image
一堆的判斷邏輯

image 
自動產生 UT 範本

 

image

就算是自動產生範本,還是要額外寫 6 種不同的 UT ,更何況是成千上萬的 Method  

 

image
測試涵蓋率 才 25 % ,另外 還有 75 % 的程式都沒有被測到

 

 

那麼是不是還有更快的方法??

難道到說一定要用 Copy & Paste ?然後再一個一個改?

其實,是可以用 PEX 外掛套件啊!

PEX 是 Visual Studio 的 Unit Test 外掛套件

 

連寫 UT 都省了!馬上讓你的 白箱測試 瞬間到 100%

 

image
在 Method 中用 Pex 產生 UT

 

image 
對應測試項目的名稱 以及 Test Framework  ( 也有支援 NUnit )

 

image 
建立測試的位置

 

 image
可以在 Pex Exploration Results 看到所有的測試結果

PEX 會依您的程式碼中的判斷邏輯,動態產生「測試條件」

 

image 
UT 會動態放在產生在此檔案中

image 
只要邏輯改變 裡面的 UT 也會跟著改  ( 要重新執行 PEX )

 

當然,若每次程式碼改,而 UT 也會同步改 那怎麼驗證程式碼到底對不對

所以,只要確認這些 動態產生的 UT 是正式的 測試項目

 

就要將這些轉成 VS 2010 的 Unit Test

image 
批次選擇 UT 後,按下右邊的「Promote the select generated unit test」

 

image

回到「測試清單」後就可以看到 剛剛選擇的 UT 已經加入到清單當中了  ( 記得要按下重新整理 )

 

image

重新執行所有 UT

image

可以看到測試涵蓋率達到 100% 了!這個方式可以大幅縮短 寫 UT 的時間!非常方便

 

而且,只要程式邏輯不是在「資料庫」中,這個方式都是非常實用的

 

比如說是 使用者登入 性質的功能 , PEX 就不太適合 。

 

 

 

另外,即使您的程式碼重構

image

PEX 也可以幫你正確地分析出來

image

現在就多了一個 Exception 項目 

 

第二次重構

image

image

可以看到 它的 UT 數量又變了

 

而 PEX 為什麼沒有再把 6 種不同的條件納進來?

 

因為 PEX 的分析思維是 Mock 隔離。

 

所以,後續的 UT 責任會落在 ClassLibrary2.Class1 中

 

寫 Unit Test 太花時間??

就用 PEX 來解決吧!

 

 

這個套件是 可以從那裡拿得到??

請到 MSDN 訂閱就可以下載的到  ( 記得選 英文項目 )

 

參考

http://research.microsoft.com/en-us/projects/pex/