第1章 為何要關心測試驅動開發 1
1.1 為何要使用TDD 1
1.1.1 理解TDD 3
1.1.2 紅燈?綠燈?重構 3
1.1.3 速度是關鍵 4
1.1.4 TDD並非測試方法 4
1.2 測試 5
1.2.1 黑盒測試 5
1.2.2 白盒測試 5
1.2.3 質量檢查和質量保證的差彆 6
1.2.4 更好的測試 6
1.3 模擬 7
1.4 可執行的文檔 7
1.5 無需調試 9
1.6 小結 9
第2章 工具、框架和環境 10
2.1 Git 10
2.2 虛擬機 11
2.2.1 Vagrant 11
2.2.2 Docker 13
2.3 構建工具 14
2.4 集成開發環境 15
2.5 單元測試框架 16
2.5.1 JUnit 17
2.5.2 TestNG 19
2.6 Hamcrest和AssertJ 21
2.6.1 Hamcrest 21
2.6.2 AssertJ 22
2.7 代碼覆蓋率工具 23
2.8 模擬框架 24
2.8.1 Mockito 26
2.8.2 EasyMock 28
2.8.3 PowerMock 29
2.9 用戶界麵測試 29
2.9.1 Web測試框架 30
2.9.2 Selenium 30
2.9.3 Selenide 31
2.10 行為驅動開發 33
2.10.1 JBehave 33
2.10.2 Cucumber 35
2.11 小結 37
第3章 紅燈?綠燈?重構——從失敗到成功再到完美 38
3.1 使用Gradle和JUnit搭建環境 39
3.2 “紅燈?綠燈?重構”過程 41
3.2.1 編寫一個測試 41
3.2.2 運行所有測試並確認最後一個未通過 41
3.2.3 編寫實現代碼 42
3.2.4 運行所有測試 42
3.2.5 重構 42
3.2.6 重復 43
3.3 “井字遊戲”的需求 43
3.4 開發“井字遊戲” 43
3.4.1 需求1 44
3.4.2 需求2 49
3.4.3 需求3 52
3.4.4 需求4 57
3.5 代碼覆蓋率 58
3.6 更多練習 59
3.7 小結 60
第4章 單元測試——專注於當下而非過往 61
4.1 單元測試 61
4.1.1 何為單元測試 62
4.1.2 為何要進行單元測試 62
4.1.3 代碼重構 62
4.1.4 為何不隻使用單元測試 63
4.2 TDD中的單元測試 64
4.3 TestNG 64
4.3.1 注解@Test 64
4.3.2 注解@BeforeSuite、@Be- foreTest、@BeforeGroups、 @After Groups、@AfterTest和@AfterSuite 65
4.3.3 注解@BeforeClass和@AfterClass 65
4.3.4 注解@BeforeMethod和@AfterMethod 66
4.3.5 注解參數@Test(enable = false) 66
4.3.6 注解參數@Test(expected- Exceptions = SomeClass. class) 66
4.3.7 TestNG和JUnit差彆小結 66
4.4 “遙控軍艦”的需求 66
4.5 開發“遙控軍艦” 67
4.5.1 創建項目 67
4.5.2 輔助類 69
4.5.3 需求1 69
4.5.4 需求2 72
4.5.5 需求3 74
4.5.6 需求4 75
4.5.7 需求5 77
4.5.8 需求6 80
4.6 小結 81
第5章 設計——難以測試說明設計不佳 82
5.1 為何要關心設計 82
5.2 Connect4 84
5.3 完成Connect4實現後再測試 85
5.3.1 需求1 85
5.3.2 需求2 86
5.3.3 需求3 87
5.3.4 需求4 88
5.3.5 需求5 89
5.3.6 需求6 89
5.3.7 需求7 90
5.3.8 需求8 91
5.4 使用TDD實現Connect4 92
5.4.1 Hamcrest 92
5.4.2 需求1 93
5.4.3 需求2 93
5.4.4 需求3 96
5.4.5 需求4 97
5.4.6 需求5 99
5.4.7 需求6 99
5.4.8 需求7 100
5.4.9 需求8 101
5.5 小結 103
第6章 模擬——消除外部依賴 104
6.1 模擬 104
6.1.1 為何使用模擬對象 105
6.1.2 術語 106
6.1.3 模擬對象 106
6.2 Mockito 107
6.3 “井字遊戲”第二版的需求 107
6.4 開發“井字遊戲”第二版 107
6.4.1 需求1 108
6.4.2 需求2 118
6.5 集成測試 124
6.5.1 分離測試 124
6.5.2 集成測試 125
6.6 小結 127
第7章 BDD——與整個團隊協作 128
7.1 不同規範 128
7.1.1 文檔 129
7.1.2 供程序員使用的文檔 129
7.1.3 供非程序員使用的文檔 130
7.2 行為驅動開發 130
7.2.1 敘述 131
7.2.2 場景 132
7.3 書店應用程序的BDD故事 133
7.4 JBehave 136
7.4.1 JBehave運行器 136
7.4.2 待定步驟 137
7.4.3 Selenium和Selenide 138
7.4.4 JBehave步驟 139
7.4.5 最後的驗證 144
7.5 小結 146
第8章 重構遺留代碼——使其重煥青春 147
8.1 遺留代碼 147
8.2 編碼套路 156
8.2.1 遺留代碼處理套路 157
8.2.2 描述 157
8.2.3 技術說明 157
8.2.4 添加新功能 157
8.2.5 黑盒測試還是尖峰衝擊測試 157
8.2.6 初步調查 158
8.2.7 應用遺留代碼修改算法 161
8.2.8 提取並重寫調用 166
8.2.9 消除狀態的“基本類型偏執”壞味 170
8.3 小結 173
第9章 功能開關——將未完成的功能部署到生成環境 175
9.1 持續集成、持續交付和持續部署 175
9.2 功能開關 177
9.3 功能開關示例 178
9.3.1 實現fibonacci服務 181
9.3.2 使用模版引擎 184
9.4 小結 187
第10章 綜述 188
10.1 TDD概要 188
10.2 最佳實踐 189
10.2.1 命名約定 189
10.2.2 流程 191
10.2.3 開發實踐 192
10.2.4 工具 195
10.3 這隻是開始 196
10.4 這並非終點 196
· · · · · · (
收起)