由于各種緣由,一本《.Net單元測試藝術》突然出現在了我的辦公桌上,于是我的單元測試之路就此開始。通過一兩個月不間斷的學習,以及不斷結合具體的項目做開發,再結合書上的知識對單元測試有了一些個人的理解,想在此與大家交流一下。
下面分為三個部分,首先說說開發過程中個人發現的一些問題,再說說單元測試在開發過程中的作用,最后,也是最重要的如何在項目中應用單元測試。由于本人是從事.Net開發的,所以會以NUint作為單元測試工具,并且和大家分享一下,我在使用NUnit過程中遇到的一些問題,以及對單元測試的一些粗線的理解。
一、軟件開發過程中存在的問題(沒有使用單元測試的情況下)
難于定位bug的位置
修改一個bug,容易引進n個bug
bug越后期發現,修改越困難
后期系統的復雜性,導致難于修改和重構代碼
開發人員常認為編譯通過,進行了幾次手工測試就等于測試通過
在完全依賴外部系統的情況下,無法進行有效的測試
手工測試效率地下,針對性不強
代碼難以維護和復用
開發人員覺得測試和修改是額外的工作,認為代碼通過編譯和調試就完成任務
二、單元測試在開發過程中起到的作用
單元測試大大節約了測試和修改的時間
單元測試能快速定位bug
單元測試能使開發人員重新審視需求和功能的設計
單元測試強迫開發者以調用者而不是實現者的角度來設計代碼,利于代碼之間的解耦
便于理解API函數的如何使用
有效且便于測試各種情況
使代碼可以放心修改和重構
單元測試可用作被測代碼的用法說明,可作為開發文檔使用
三、如何在實際項目中應用單元測試(.Net項目為例)
選用NUnit作為單元測試工具
NUnit的簡單使用
單元測試的核心技術
由于篇幅和個人精力有限,我會在下一篇中講解如何在實際項目中應用單元測試。
現在接著上次說到的內容,如何在項目中進行單元測試。由于做了一些調整,我上次發的內容,我這次也會重新發一次,請認真看看。
一、軟件開發過程中存在的問題(沒有使用單元測試的情況下)
難于定位bug的位置
修改一個bug,容易引進n個bug
bug越后期發現,修改越困難
后期系統的復雜性,導致難于修改和重構代碼
開發人員常認為編譯通過,進行了幾次手工測試就等于測試通過
在完全依賴外部系統的情況下,無法進行有效的測試
手工測試效率地下,針對性不強
代碼難以維護和復用
開發人員覺得測試和修改是額外的工作,認為代碼通過編譯和調試就完成任務
二、單元測試在開發過程中起到的作用
單元測試大大節約了測試和修改的時間
單元測試能快速定位bug
單元測試能使開發人員重新審視需求和功能的設計
單元測試強迫開發者以調用者而不是實現者的角度來設計代碼,利于代碼之間的解耦
自動化的單元測試能保證回歸測試的有效執行
有效且便于測試各種情況
使代碼可以放心修改和重構
單元測試可用作被測代碼的用法說明,可作為開發文檔使用
以下舉一個本人項目的例子,這個被測方法是驗證登陸用戶是否為管理員或版主
例子:public bool IsAdminOrBoardMaster(IOnLineUser p_OnLineUser)
{
if (!IsRegularUser(p_OnLineUser))//判斷是否為有效用戶
return false;
if (p_OnLineUser.UserType == UserType.Teacher)//判斷是否為教師
{
if (IsHeadmanForUser(p_OnLineUser.UserIdentity))//判斷是否為教師組組長
return true;
else
return IsCourseClassBoardMasterForUser(p_OnLineUser.UserId);//判斷是否為課程班帶教老師
}
else if (p_OnLineUser.UserType == UserType.Student)//判斷是否為班長
return p_OnLineUser.UserIdentity == 1;//身份為1的話,用戶為班長,返回true
else
return true;//管理員
}
從以上例子可有以下的測試用例
用戶為無效用戶,返回false
用戶有效,類型為管理員,返回true
用戶有效,類型為學生且為班長,返回true
用戶有效,但為普通學生,返回false
用戶有效,類型為教師且為組長,返回true
用戶有效,類型為教師且為課程班帶教老師,返回true
用戶有效,但為普通教師,返回false
根據上面的測試用例,運行單元測試,NUnit運行如下圖
測試用例全部通過,現在我修改一下生產代碼,令運行失敗,如下圖
單元測試可以好清楚地顯示哪個方法,哪個參數報錯了,出錯原因在右面。本人通過這兩個例子為了顯示一下單元測試在我們實際開發中的其中一個功能,快速定位bug。下面將開始講解如何在實際項目中應用單元測試。
原文轉自:http://www.cnblogs.com/jialege/p/3601184.html