《Java測試驅動開發》介紹如何將各種TDDzui佳實踐應用于Java開發,主要內容包括:用Java語言進行TDD會用到的各種工具和框架,所需環境搭建;通過實際應用程序,展示TDD優點及開發中應注意的主要問題;TDD是如何通過模擬內部和外部依賴來提升速度的;如何重構既有應用程序;詳細介紹所有TDDzui佳實踐。
《Java測試驅動開發》適合所有Java開發人員,也適合用其他語言編程的程序員了解TDD。
Java開發必讀!
從使用TDD開始,改善設計和代碼的質量、簡化重構工作、提高代碼覆蓋率。
-卓有成效地踐行測試驅動開發所需的工具和框架
-高效執行紅燈-綠燈-重構過程
-如何以獨立于其他代碼的方式進行有效的單元測試
-使用各種技巧設計簡單而易于維護的代碼
-使用模擬框架和技巧輕松編寫測試并快速執行
-結合行為驅動開發和單元測試進行TDD
-重構遺留代碼
Viktor Farcic
資-深軟件架構師,Docker船長,Java開發專家,熱衷于測試驅動開發、行為驅動開發、持續集成、持續交付和持續部署。
他把多年經驗都分享在了博客上,深受讀者歡迎:http://TechnologyConversations.com。
Alex Garcia
資-深Java程序員,敏捷實踐擁躉,熱衷于學習新語言、新范式、新框架。
目 錄
第1章 為何要關心測試驅動開發1
1.1 為何要使用TDD1
1.1.1 理解TDD3
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 Git10
2.2 虛擬機11
2.2.1 Vagrant11
2.2.2 Docker13
2.3 構建工具14
2.4 集成開發環境15
2.5 單元測試框架16
2.5.1 JUnit17
2.5.2 TestNG19
2.6 Hamcrest和AssertJ21
2.6.1 Hamcrest21
2.6.2 AssertJ22
2.7 代碼覆蓋率工具23
2.8 模擬框架24
2.8.1 Mockito26
2.8.2 EasyMock28
2.8.3 PowerMock29
2.9 用戶界面測試29
2.9.1 Web測試框架30
2.9.2 Selenium30
2.9.3 Selenide31
2.10 行為驅動開發33
2.10.1 JBehave33
2.10.2 Cucumber35
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 需求144
3.4.2 需求249
3.4.3 需求352
3.4.4 需求457
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 TestNG64
4.3.1 注解@Test64
4.3.2 注解@BeforeSuite、@Be- foreTest、@BeforeGroups、 @After Groups、@AfterTest和@AfterSuite65
4.3.3 注解@BeforeClass和@AfterClass65
4.3.4 注解@BeforeMethod和@AfterMethod66
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 需求169
4.5.4 需求272
4.5.5 需求374
4.5.6 需求475
4.5.7 需求577
4.5.8 需求680
4.6 小結81
第5章 設計難以測試說明設計
不佳82
5.1 為何要關心設計82
5.2 Connect484
5.3 完成Connect4實現后再測試85
5.3.1 需求185
5.3.2 需求286
5.3.3 需求387
5.3.4 需求488
5.3.5 需求589
5.3.6 需求689
5.3.7 需求790
5.3.8 需求891
5.4 使用TDD實現Connect492
5.4.1 Hamcrest92
5.4.2 需求193
5.4.3 需求293
5.4.4 需求396
5.4.5 需求497
5.4.6 需求599
5.4.7 需求699
5.4.8 需求7100
5.4.9 需求8101
5.5 小結103
第6章 模擬消除外部依賴104
6.1 模擬104
6.1.1 為何使用模擬對象105
6.1.2 術語106
6.1.3 模擬對象106
6.2 Mockito107
6.3 井字游戲第二版的需求107
6.4 開發井字游戲第二版107
6.4.1 需求1108
6.4.2 需求2118
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 JBehave136
7.4.1 JBehave運行器136
7.4.2 待定步驟137
7.4.3 Selenium和Selenide138
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