天天看點

單元測試軍規

引自:http://blog.jobbole.com/83837/?ref=myread

不應該編寫成功通過的單元測試-它們應該被寫成不通過的。你可以在幾分鐘内讓任何一組測試通過,但這隻是在欺騙你自己。

測試類應該隻測試一個功能-你應該用一個功能去測試一個方法。否則,你會違反了單一職責原則。

測試類具備可讀性-確定測試類标有注釋并且容易了解,就像其他的代碼一樣。

良好的命名規範-再次測試時應該像其他代碼一樣-便于人們了解。

把斷言從行為中分離出來-你的斷言應該用來檢驗結果,而不是執行邏輯操作的。

使用具體的輸入-不要使用任何的自動化測試資料來輸入,像date()這些産生的資料會引入差異。

把測試類分類,放在不同的地方-從邏輯的角度看,當沒有錯誤指向特定的問題時這更容易去查找。

好的測試都是一些獨立的測試類-你應該讓測試類與其他的測試、環境設定等沒有任何依賴。這利于建立多個測試點。

不要包含私有的方法-他們都是一些具體的實作,不應該包含在單元測試裡。

不要連接配接資料庫或者資料源-這是不靠譜的。因為你不能確定資料服務總是一樣的并且能夠建立測試點。

一個測試不要超過一個模拟(mock對象)-我們努力去消除錯誤和不一緻性。

單元測試不是內建測試-如果你想測試結果,不要使用單元測試。

測試必須具有确定性-你需要一個确定的預測結果,是以,如果有時候測試通過了,但是不意味着完成測試了。

保持你的測試是幂等的-你應該能夠運作你的測試多次而不改變它的輸出結果,并且測試也不應該改變任何的資料或者添加任何東西。無論是運作一次還是一百萬次,它的效果都應該是一樣的。

測試類一次僅測試一個類,測試方法一次僅測試一個方法-組織方法能夠在問題出現時檢測出來,并幫你确定測試依賴。

在你的測試裡使用異常-你在測試裡會遇到異常,是以,請不要忽略它,要使用它。

不要使用你自己的測試類去測試第三方庫的功能-大多數好的庫都應該有它們自己的測試,如果沒考慮用mocks去産生一緻性的結果的話。

限制規則-當在一些規則下寫測試時,記住你的限制和它們(最小和最大)設定成最大的一緻性。

測試類不應該需要配置或者自定義安裝-你的測試類應該能夠給任何人使用并且使它運作。“在我的機器上運作”不應該出現在這。

繼續閱讀