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