軟件工程師必知的12個單元測試技巧[2] 單元測試代碼
模擬對象實現了特定的接口,但是返回預先定義好的結果。舉個例子來說,你可以為Amazon S3創建一個模擬對象,它只從你的本地硬盤中讀取預先設置好的數據,而不去使用真實服務數據。
在對具有很多構件的復雜系統進行測試的時候,模擬對象是非常有用的。在JavaScript中有幾個框架可以非常方便的創建模擬對象,其中最出名的是JMock。
7、代碼重構時也對測試代碼進行重構
你只有對測試工作真正投入,它才會發揮更大的作用。你不僅僅要編寫測試,你還需要確保它們及時更新。當為一個組件增加一個新方法時,你需要同時增加一個或更多的相應測試。同樣,如果你要刪除無用代碼的話,也要刪除已經不再有用的測試。
在進行大量重構工作的時候單元測試尤其有用。利用重構可以大大提高我們的編程效率,不過對代碼完成了重構后,別忘了也對測試進行相應的修改,并要重新運行一下所有相關測試,以確保在進行程序改動的時候沒有出現錯誤。
8、針對發現的程序漏洞編寫測試
在減少漏洞方面,單元測試是一個非常有用的武器。當你發現了代碼中的問題后,在對其進行修復以前,先編寫一個測試來讓這個問題可以在測試的時候暴露出來。這樣,如果這個問題在其它地方重新出現的話,你就可以在測試的時候輕松發現它們。
這是一個非常有用的經驗,因為你不可能總是馬上就編寫出能發現所有問題的測試代碼。當你增加了針對某種漏洞的測試后,實際上你的測試代碼距離完美又靠近了一步。軟件測試
9、使用單元測試來確保性能
除了確保代碼的正確性之外,單元測試還可以幫助我們確保代碼的性能不會隨時間而下降。在很多系統中存在這個問題,隨著系統開發工作的繼續進行,被加入了越來越多的代碼,會變得越來越慢。
要想編寫性能測試,你需要在你的測試基類中增加start和stop功能函數。在單元測試階段就開始考慮性能測試是非常必要的,這樣在代碼發生改變或者對代碼進行了優化時就能看出這些改變是否會影響到性能,能盡早的發現代碼變更對性能的影響。
一個系統的性能如果拆分來看,可以看成若干單元性能的一個有機結合,單元的性能勢必也會對整個系統的性能產生影響,所以盡早考慮性能測試是很必要的,當然這需要很好的分析和設計了。
10、為并發代碼創建測試
并發代碼通常不容易控制,通常是許多漏洞的源頭。因此對它們進行單元測試是非常重要的。實現方法是使用一個休眠和鎖定機制。如果你需要等待一個特定的系統狀態,你可以在你的測試中 使用休眠調用功能。
盡管這并不是一個完全正確的解決辦法,但是在很多情況下它已經夠用了。
如果要在一個更加復雜的場景中模擬并發性,你需要圍繞你測試的對象進行鎖的傳遞。這樣你可以模擬并發系統,不過它是線性的。
11、連續運行測試
軟件測試的要點就是多多運行它們。尤其在大型開發團隊中,常常有數十個開發者共同修改同一個程序,這種情況進行連續的單元測試是非常重要的。
你可以每隔幾個小時運行一次測試,也可以每次當有代碼加入的時候運行測試,或者每天運行一次測試。根據自己的實際情況決定哪一種方法最適合你的項目,然后讓測試自動連續運行。
12、享受測試的樂趣
這可能是軟件測試中最重要的技巧。當我第一次發現單元測試的時候,我懷疑它簡直就是一件多此一舉的事情。但是我還是嘗試著接受了它,因為我信賴的一些優秀程序員告訴我它非常有用。
技術大師Martin Fowler曾表示,單元測試能夠使你更快地完成工作。無數次的實踐已經證明這一點。你的時間越是緊張,就越是要寫單元測試,它看上去慢,但實際上能夠幫助你更快、更舒服地達到目標。
單元測試可以讓你的大腦處于一種完全不同于編程時的狀態。為一個指定的構件設計一個簡單又正確的測試代碼是一件非常有意思的事情。
一旦你開始編寫測試,你會發現你已經離不開它。為了讓測試變得更有趣,你可以與別人進行結對編程(pair programming)。無論你是與同伴一起編寫測試,還是互相為對方編寫測試,都可以體驗到其中的樂趣。最終你將會非常高興的認為你的系統可以真正運行,因為它通過了你的測試。
文章來源于領測軟件測試網 http://www.kjueaiud.com/