為什麼要編寫單元測試?原因是單元測試有不少的優點,能夠給我們的工作帶來很大的幫助。
單元測試的優點
1.幫助開發人員編寫**,提公升質量、減少bug。如果大家分析一下我們bug原因的構成,我想有會有一部分bug的原因是開發人員在編寫工作**的時候沒有考慮到某些case或者邊際條件。造成這種問題的原因很多,其中很重要的乙個原因是我們對工作**所要完成的功能思考不足,而編寫單元測試,特別是先寫單元測試再寫工作**就可以幫助開發人員思考編寫的**到底要實現哪些功能。例如實現乙個簡單的使用者註冊功能的業務類方法,用單元測試再寫工作**的方式來工作的話
開發人員就會先考慮各種場景相關,例如正常註冊、使用者名稱重複、沒有滿足必要的填寫內容......等等,之後就會編寫相關的測試用例
public class userserivcetest()
public userregister_nameduplicated()
public userregister_emailempty()
}編寫單元測試**的過程就是促使開發人員思考工作**實現內容和邏輯的過程,之後實現工作**的時候,開發人員思路會更清晰,實現**的質量也會有相應的提公升。
2. 提公升反饋速度,減少重複工作,提高開發效率。開發人員實現某個功能或者修補了某個bug,如果有相應的單元測試支援的話,開發人員可以馬上通過執行單元測試來驗證之前完成的**是否正確,而不需要反覆通過發布war包、啟動jboss、通過瀏覽器輸入資料等繁瑣的步驟來驗證所完成的功能。用單元測試**來驗證**和通過發布應用以人工的方式來驗證**這兩者的效率差很多,看到很多開發人員每天要反覆執行n次發布指令碼(antx之類的工具)真是痛苦。
3.保證你最後的**修改不會破壞之前**的功能。專案越做越大,**越來越多,特別涉及到一些公用介面之類的**或是底層的基礎庫,誰也不敢保證這次修改的**不會破壞之前的功能,所以與此相關的需求會被擱置或推遲,由於不敢改進**,**也變得越來越難以維護,質量也越來越差。而單元測試就是解決這種問題的很好方法(不敢說最好的)。由於**的歷史功能都有相應的單元測試保證,修改了某些**以後,通過執行相關的單元測試就可以驗證出新調整的功能是否有影響到之前的功能。當然要實現到這種程度需要很大的付出,不但要能夠達到比較高的測試覆蓋率,而且單元測試**的編寫質量也要***。
4. 讓**維護更容易。由於給**寫很多單元測試,相當於給**加上了規格說明書,開發人員通過讀單元測試**也能夠幫助開發人員理解現有**。很有opensource的專案都有相當量的單元測試**,通過讀這些測試**會有助於理解生產源**。
5. 有助於改進**質量和設計。除了那些大拿們編寫的**,我相信很多易於維護、設計良好的**都是通過不斷的重構才得到的。雖然說單元測試本身不能直接改進生產**的質量,但它為生產**提供了"安全網",讓開發人員可以勇敢地改進**,從而讓**的clean和beautiful不再是夢想。
單元測試的缺點
1.單元測試的學習成本比較高。編寫單元測試涉及的技術很多,如果只是單純的使用junit或是 testng這樣的基礎單元測試框架往往很難應對各種複雜的單元測試情況,所以勢必要借助很多第三方的框架和技術(easymock,jmock,dbunit等等),這些框架和技術的學習還是會增加學習的成本和難度。
2.編寫單元測試會增加程式設計師工作量。單元測試跟生產**是一樣的,並不會應為是用來測試的就有所不同,開發人員同樣要面對測試**的編寫、維護等工作,也同樣要面對避免重複**等一系列問題,能否寫出好的測試**還是取決於開發人員的設計和編碼能力。
3. 推廣和運用單元測試需要比較大的投入。只有在每個開發人員都編寫了足夠的、***的單元測試**,大家才能真正享受到單元測試帶給我們的好處。在達到這種層度以前,還需要不少實現和資源的投入。
總結雖然單元測試也有一些缺點和負面的效應,但跟單元測試的優點比較起來,為了克服和解決這些缺點所在的付出是值得的。
什麼是單元測試
單元測試是用來對乙個模組 乙個函式或者乙個類來進行正確性檢驗的測試工作。比如對函式abs 我們可以編寫出以下幾個測試用例 輸入正數,比如1 1.2 0.99,期待返回值與輸入相同 輸入負數,比如 1 1.2 0.99,期待返回值與輸入相反 輸入0,期待返回0 輸入非數值型別,比如none 期待丟擲t...
為什麼需要單元測試
軟體開發的標準過程包括以下幾個階段 需求分析階段 設計階段 實現階段 測試階段 發布 其中測試階段通過人工或者自動手段來執行或測試某個系統的過程,其目的在於檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差別。測試過程按4個步驟進行,即單元測試 整合測試 系統測試及發版測試。其中功能測試主要檢...
為什麼需要單元測試
軟體開發的標準過程包括以下幾個階段 需求分析階段 設計階段 實現階段 測試階段 發布 其中測試階段通過人工或者自動手段來執行或測試某個系統的過程,其目的在於檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差別。測試過程按4個步驟進行,即單元測試 整合測試 系統測試及發版測試。其中功能測試主要檢...