第一章
讀書筆記:
傳統(tǒng)定義
一個單元測試是一段代碼(通常是一個方法)摩幔,這段代碼調用另一段代碼弹灭,然后檢驗某些假設的正確性。如果這些假設是錯誤的胧奔,單元測試就失敗了。
泛化
一個單元代表系統(tǒng)的”系統(tǒng)單元“或一個”用例“预吆,從調用系統(tǒng)的一個公共方法
單元測試是否應該盡可能的辛睢?
如果創(chuàng)建的工作單元更大拐叉,他的最終結果對這個接口的用戶可見性更高岩遗,那么測試更容易維護。
如果測試單元縮小凤瘦,最后不等不偽造一堆東西宿礁,這些東西并不是使用公共API的真實最終結果,而是生成結果過程中的一些中間狀態(tài)蔬芥,這是一種過渡指定
單元測試的特性:
自動化
可重復執(zhí)行
很容易實現(xiàn)
未來仍然有意義
任何人都可以一鍵運行
速度快
結果穩(wěn)定
能夠完全控制被測試的單元
應該完全隔離
如果失敗了梆靖,能夠很容易的發(fā)現(xiàn)期待的結果,從而定位問題
集成測試定義:如果運行速度不快笔诵、結果不穩(wěn)定返吻、用到一個和多個依賴物,我們稱之為集成測試
依賴物包括但不限于真實的系統(tǒng)時間乎婿、真實的文件系統(tǒng)测僵、真實的數(shù)據(jù)庫
差的單元測試沒有任何的意義,最多只能是初次練習時候的產(chǎn)物谢翎,而且還增加了后續(xù)刪除的工作量捍靠。我們需要的是優(yōu)秀的單元測試沐旨。優(yōu)秀的單元測試實在單元測試特征的基礎上增加了三個特性:可靠、可讀和可維護
TDD的意義:測試優(yōu)先于開發(fā)
TDD的步驟:
第一步:編寫一個會失敗的測試榨婆,以證明產(chǎn)品中代碼或者功能的缺陷
第二步:編寫符合測試預期的蟾皮代碼希俩,是測試通過
第三步:重構代碼(可選),重復到第一步纲辽。
成功TDD的三個核心技能:
知道如何編寫優(yōu)秀的測試
在編碼前編寫測試
良好的測試設計
誤區(qū):
僅僅做到先編寫測試颜武,并不能保證測試是可靠、可讀和可維護
僅僅做到編寫測試時可靠拖吼、可讀和可維護并不能保證能夠獲得先編寫測試的好處
僅僅做到先編寫可靠鳞上、可讀和可維護的測試,也不能保證能夠得到一個設計完善的系統(tǒng)吊档。
設計能力才是使代碼優(yōu)美篙议,可維護的關鍵。
介紹優(yōu)秀測試技能的書
kent beck的 《Test-Driven Development:by Example》
https://www.oreilly.com/library/view/test-driven-development/0321146530/
設計能力相關的書
《Growing Object-Oriented Software, Guided by Tests》
《程序員的職業(yè)修養(yǎng)》
思考:
之前一直在做的是集成測試
單元測試只關注與被測試對象的邏輯怠硼,而與外部依賴的數(shù)據(jù)無關