對本書的贊譽
譯者序
序
前言
作者簡介
緻謝
第一部分簡介
第1章測試驅動開發的要點
1.1軟件開發是一個學習過程
1.2反饋是基本工具
1.3支持變化的實踐
1.4測試驅動開發簡介
1.5大局
1.6用戶場景測試
1.7測試的級彆
1.8外部品質與內部品質
第2章測試驅動開發與對象
2.1對象之網
2.2值與對象
2.3對象通信
.2.4吩咐,不要問
2.5但有時要問
2.6對協作的對象執行單元測試
2.7用模擬對象支持TDD
第3章工具介紹
3.1如果您已瞭解這些框架,可以跳過本章
3.2JUnit 4簡介
3.2.1測試用例
3.2.2斷言
3.2.3預期異常
3.2.4測試裝置
3.2.5測試執行者
3.3Hamcrest匹配器和assertThat()
3.4jMock2: 模擬對象
第二部分測試驅動開發過程
第4章啓動測試驅動循環
4.1簡介
4.2先測試一個可行走的骨架
4.3決定行走的骨架的形狀
4.4創建反饋源
4.5盡早暴露不確定性
第5章保持測試驅動循環
5.1簡介
5.2每個特徵都從一個驗收測試開始
5.3分離測量進度的測試和捕捉迴歸
錯誤的測試
5.4從最簡單的成功場景開始測試
5.5編寫您願意讀的測試
5.6看著測試失敗
5.7從輸入開發到輸齣開發
5.8針對行為進行單元測試,而非針對
方法
5.9聆聽測試
5.10調整循環
第6章麵嚮對象風格
6.1簡介
6.2為可維護性而設計
6.3內部與同級的比較
6.4沒有“與”、“或”、“但是”
6.5對象同級構造型
6.6組閤比它的部分之和更簡單
6.7上下文無關性
6.8正確地隱藏信息
6.9固執己見的觀點
第7章實現麵嚮對象設計
7.1先寫測試怎樣有助於設計
7.2通信比分類更重要
7.3值類型
7.4對象來自何處
7.4.1分解
7.4.2萌芽
7.4.3打包
7.5利用接口確定關係
7.6接口也要重構
7.7組閤對象以描述係統行為
7.8邁嚮更高層的編程
7.9關於類
第8章基於第三方代碼構建
8.1簡介
8.2隻模擬您擁有的類型
8.2.1不要模擬您不能修改的類型
8.2.2編寫一個適配層
8.3在集成測試中模擬應用對象
第三部分工作的例子
第9章委托開發一個拍賣狙擊者
9.1從頭開始
9.2與一次拍賣通信
9.2.1拍賣協議
9.2.2XMPP消息
9.3安全實現目標
9.4這不是真的
第10章可行走的骨架
10.1從壁櫥中取齣骨架
10.2我們的第一個測試
10.3一些初始選擇
10.3.1用戶場景測試
10.3.2準備開始
第11章通過第一個測試
11.1構建測試的裝配
11.1.1應用執行者
11.1.2僞造的拍賣
11.1.3消息代理
11.2測試失敗和通過
11.2.1第一個用戶界麵
11.2.2顯示狙擊者狀態
11.2.3連接到拍賣
11.2.4從拍賣接收迴應
11.3必需的最小實現
第12章準備競拍
12.1對市場的介紹
12.2針對競拍的測試
12.2.1從測試開始
12.2.2擴展僞造的拍賣
12.2.3令人吃驚的失敗
12.2.4由外至內開發
12.2.5對細節的無限關注
12.3AuctionMessageTranslator類
12.3.1提取齣一個新類
12.3.2第一個單元測試
12.3.3完成用戶界麵循環
12.3.4我們實現瞭什麼
12.4解析價格消息
12.4.1引入消息事件類型
12.4.2第二個測試
12.4.3發現進一步的工作
12.5完成工作
第13章狙擊者發齣競拍齣價
13.1引入AuctionSniper
13.1.1一個新類及其依賴關係
13.1.2關注、關注、關注
13.2發送競拍齣價
13.2.1Auction接口
13.2.2AuctionSniper發齣競拍齣價
13.2.3利用AuctionSniper成功競拍
13.2.4用戶場景測試通過瞭
13.3整理實現
13.3.1提取齣XMPPAuction
13.3.2提取用戶界麵
13.3.3整理翻譯者類
13.4延遲決定
13.5自然發生的設計
第14章狙擊者贏得拍賣
14.1先寫一個失敗的測試
14.2誰知道競拍者
14.3狙擊者還有話要說
14.4狙擊者需要某種狀態
14.5狙擊者獲勝
14.6取得穩定的進展
第15章邁嚮真正的用戶界麵
15.1更現實的實現
15.1.1接下來我們該做什麼
15.1.2替換JLabel
15.1.3還是很醜
15.2顯示價格細節
15.2.1先寫一個失敗的測試
15.2.2狙擊者送齣狀態
15.2.3展現競拍狙擊者
15.3簡化狙擊者事件
15.3.1跟著感覺走
15.3.2重新確定sniperBidding()的目標
15.3.3填入數字
15.4更進一步
15.4.1轉換勝利和失敗
15.4.2修整錶模型
15.4.3麵嚮對象的列
15.4.4縮短事件路徑
15.5最後潤色
15.5.1針對列標題的測試
15.5.2實現TableModel
15.5.3目前已足夠
15.6短評
15.6.1單一職責
15.6.2軟件微創手術
15.6.3程序員過敏癥
15.6.4慶賀思維轉變
15.6.5這不是唯一的解決方案
第16章狙擊多項物品
16.1針對多項物品的測試
16.1.1兩件物品的故事
16.1.2ApplicationRunner類
16.1.3偏離主題,改進失敗信息
16.1.4重新設計Main的結構
16.1.5擴展錶模型
16.2通過用戶界麵添加物品
16.2.1更簡單的設計
16.2.2更新測試
16.2.3添加一個動作條
16.2.4設計時刻
16.2.5另一層次的測試
16.2.6實現UserRequestListener
16.3短評
16.3.1取得穩定的進展
16.3.2TDD的秘密
16.3.3發布它
第17章分解Main
17.1發現角色
17.2提取Chat
17.2.1分離Chat
17.2.2封裝Chat
17.2.3編寫一個新測試
17.3提取Connection
17.4提取齣SnipersTableModel
17.4.1狙擊啓動者類SniperLauncher
17.4.2狙擊組閤
17.5短評
17.5.1增量式架構
17.5.2三點不動
17.5.3動態設計的同時也進行靜態設計
17.5.4對notToBeGCd的另一種修復方法
第18章填充細節
18.1更有用的應用
18.2適可而止
18.2.1引入落後狀態
18.2.2第一個失敗的測試
18.2.3輸入停止價格
18.2.4傳送停止價格
18.2.5約束AuctionSniper
18.3短評
18.3.1增量式設計用戶界麵
18.3.2其他建模技術也有用
18.3.3領域類型比字符串好
第19章處理失敗
19.1如果它不能工作
19.2檢測失敗
19.3顯示失敗
19.4斷開狙擊者
19.5記錄失敗
19.5.1填充測試
19.5.2翻譯者中的失敗報告
19.5.3生成日誌消息
19.5.4完成這次開發循環
19.6短評
19.6.1 “切香腸的逆過程”式開發
19.6.2用一些小方法來錶達意圖
19.6.3日誌也是一項功能
第四部分可持續的測試驅動開發
第20章聆聽測試
20.1簡介
20.2我需要模擬一個不能替換的對象
20.2.1單例是依賴關係
20.2.2從過程到對象
20.2.3隱式依賴也是依賴
20.3記日誌是一項功能
20.3.1通知而不是記日誌
20.3.2但這種想法很瘋狂
20.4模擬具體的類
20.5不要模擬值類型
20.6膨脹的構造方法
20.7令人睏惑的對象
20.8太多依賴關係
20.9太多預期
20.10測試會告訴我們什麼
第21章測試可讀性
21.1簡介
21.2測試名稱描述功能
21.3規範的測試結構
21.4精簡測試代碼
21.4.1用結構來解釋
21.4.2利用結構來共享
21.4.3強調正麵
21.4.4代理給從屬對象
21.5斷言和預期
21.6具體值和變量
第22章構造復雜的測試數據
22.1簡介
22.2測試數據建造者
22.3創建一些類似的對象
22.4組閤建造者
22.5利用工廠方法強調領域模型
22.6從使用的角度消除重復
22.6.1首先,消除重復
22.6.2然後,讓遊戲升級
22.7溝通第一
第23章測試診斷
23.1要的就是失敗
23.2小、專注、良好命名的測試
23.3解釋性斷言消息
23.4利用匹配器對象來突齣細節
23.5自描述的值
23.6明顯的預裝值
23.7跟蹤者對象
23.8明確斷言預期得到滿足
23.9診斷是一級功能
第24章測試的靈活性
24.1簡介
24.2針對信息測試,而非針對錶示方法
24.3準確斷言
24.4準確預期
24.4.1準確的參數匹配
24.4.2允許和預期
24.4.3忽略不相關的對象
24.4.4調用次序
24.4.5jMock States的威力
24.4.6更為自由的預期
24.5“豚鼠”對象
第五部分高 級 主 題
第25章測試持久性
25.1簡介
25.2隔離影響持久狀態的那些測試
25.3明確測試的事務邊界
25.4測試一個執行持久操作的對象
25.5測試對象能夠持久
25.5.1來迴轉換持久對象
25.5.2來迴轉換相關的實體
25.6但數據庫測試很慢
第26章單元測試與綫程
26.1簡介
26.2分離功能和並發策略
26.2.1並發地搜索拍賣
26.2.2引入Executor
26.2.3實現AuctionSearch
26.3對同步進行單元測試
26.3.1針對AuctionSearch的壓力測試
26.3.2兩次修復競爭條件
26.4對被動對象進行壓力測試
26.5同步測試綫程和後颱的多綫程
26.6單元壓力測試的局限性
第27章測試異步代碼
27.1簡介
27.2取樣或監聽
27.3兩種實現
27.3.1捕獲通知
27.3.2輪詢變更
27.3.3超時
27.3.4改進探測類
27.4輕易成功的測試
27.5錯過更新
27.6測試沒有效果的活動
27.7區分同步和斷言
27.8事件源外部化
後記模擬對象簡史
附錄AjMock2速查手冊
附錄B編寫Hamcrest Matcher
參考文獻
· · · · · · (
收起)