一般情況下,大家喜歡在setUp()中創建環境,運行完測試,在tearDown()中清除環境,這樣互相不依賴。我把這種情況叫做“利他”,即你相信別人,別人也相信你。這對很多單元測試都沒問題。
但是有時候你是否遇見過這樣的問題:
1.跟其他同事協作開發時,你對自己寫的單元測試瞭然於胸,但是未免不會心裏打鼓:萬一別人tearDown()不正確,並對我的測試有影響了怎麼辦?
一般情況下,大家需要實現商量好,比如都同意在setUp()創建環境,tearDown()清除環境。
2.即使跟其他同事商量好了setUp()、tearDown()的職責,你是否遇到過這樣的情況呢?
在IDE裏面跑某個DAO類所有的測試方法(可能測試方法比較多,需要的時間比較長),剛點了執行,突然發現某些地方寫錯了,或者其它原因,你直接終止了運行。這樣就造成了不希望的後果:下次運行測試也會失敗,因爲你強行終止了進程,沒有來得及tearDown()。於是下一次執行測試之前,你不得不通過sql或者其它辦法先把數據庫裏的數據清理一下。
3.你在運行所有單元測試的過程中,發現某個dao測試失敗了,經過仔細debug,花費了很多時間,發現竟然是前一個dao測試沒有清理完全數據,雖然之前你和同事已經商量過了。
同樣,在功能測試中也可能遇到前面所提的問題。那麼有更好的辦法嗎?
很多人可能已經實踐過這樣寫單元測試(尤其是DAO等代價比較高的測試),把清理環境和創建環境都放到setUp()時做。這樣肯定保證了自己單元測試的順利執行。我認爲這種方式是“利己”的方式,但是在這種情況下卻是非常合適的方式。雖然利己,但是如果大家事先生命,而且人人保證自己沒問題,那麼所有的單元測試一塊跑起來問題也就不大。