JUnit 實戰, 3/e Junit in Action, 3/e

Cătălin Tudose 譯 沈澤剛 ,王永勝

買這商品的人也買了...

商品描述

本書全面介紹JUnit 5的新特性及其主要應用。
全書共22章,分為五部分。
第一部分介紹JUnit 的核心、JUnit的體系結構、從JUnit 4向JUnit 5遷移、軟件測試原則等內容;
第二部分介紹軟件測試質量、用stub和mock object進行測試、容器內測試等內容;
第三部分介紹用Maven和Gradle工具運行JUnit測試、IDE對JUnit 5的支持、JUnit 5的持續集成等內容;
第四部分介紹JUnit 5擴展模型,表示層測試,Spring、Spring Boot和REST API以及數據庫應用程序的測試等內容;
第五部分介紹使用JUnit 5進行測試驅動開發和行為驅動開發,以及用JUnit 5實現測試金字塔策略等內容。
本書既適合剛接觸JUnit框架的Java開發人員閱讀,也適合想要了解JUnit 5新特性的、
經驗豐富的JUnit開發人員學習,尤其適合企業級Java開發人員閱讀。
本書還可作為高等院校學生“軟件測試”課程的參考用書。

目錄大綱

目錄
一部分JUnit
1章JUnit起步3
1.1 證明程序的可運行性4
1.2 從零開始5
1.2.1 單元測試框架的規則8
1.2.2 添加單元測試8
1.3 安裝JUnit 9
1.4 使用JUnit測試11
1.5 小結13
2章探索JUnit的核心14
2.1 核心註解15
2.1.1 @DisplayName註解17
2.1.2 @Disabled註解18
2.2 嵌套測試20
2.3 標記測試21
2.4 斷言22
2.5 假設26
2.6 JUnit 5的依賴注入28
2.6.1 TestInfoParameterResolver 28
2.6.2 TestReporterParameterResolver 29
2.6.3 RepetitionInfoParameterResolver 30
2.7 重複測試30
2.8 參數化測試32
2.9 動態測試35
2.10 使用Hamcrest 匹配器37
2.11 小結41
3章JUnit的體系結構42
3.1 軟件體系結構的概念和重要性42
3.1.1 故事一:電話簿43
3.1.2 故事二:運動鞋製造商43
3.2 JUnit 4的體系結構44
3.2.1 JUnit 4模塊化44
3.2.2 JUnit 4運行器45
3.2.3 JUnit 4規則47
3.2.4 JUnit 4體系結構的缺點52
3.3 JUnit 5的體系結構52
3.3.1 JUnit 5模塊化52
3.3.2 JUnit Platform 53
3.3.3 JUnit Jupiter 53
3.3.4 JUnit Vintage 54
3.3.5 JUnit 5體系結構的全景54
3.4 小結56
4章從JUnit 4向JUnit 5遷移57
4.1 從JUnit 4向JUnit 5跨越57
4.2 所需的依賴項58
4.3 註解、類和方法60
4.3.1 等價的註解、類和方法60
4.3.2 分類和標記64
4.3.3 遷移Hamcrest匹配器功能69
4.3.4 規則與擴展模型71
4.3.5 自定義規則74
4.4 小結78
5章軟件測試原則79
5.1 單元測試的要性79
5.1.1 帶來更高的測試覆蓋率80
5.1.2 提高團隊的工作效率80
5.1.3 檢測出衰退跡象和減少調試次數80
5.1.4 自信地重構80
5.1.5 改進實現82
5.1.6 文檔化預期行為82
5.1.7 啟用代碼覆蓋率和其他指標83
5.2 測試類型83
5.2.1 單元測試84
5.2.2 集成測試84
5.2.3 系統測試85
5.2.4 驗收測試85
5.3 黑盒測試和白盒測試的對比86
5.3.1 黑盒測試86
5.3.2 白盒測試86
5.3.3 黑盒測試和白盒測試的優點和缺點87
5.4 小結88

二部分不同的測試策略
6章測試質量91
6.1 測試覆蓋率度量91
6.1.1 測試覆蓋率簡介92
6.1.2 代碼覆蓋率度量工具93
6.2 編寫易於測試的代碼96
6.2.1 理解公共API契約97
6.2.2 減少依賴97
6.2.3 創建簡單的構造方法98
6.2.4 遵循迪米特法則99
6.2.5 避開隱藏的依賴項和全局狀態100
6.2.6 優先使用泛型方法101
6.2.7 組合優於繼承102
6.2.8 多態優於條件102
6.3 測試驅動開發104
6.3.1 調整開發週期104
6.3.2 TDD的兩個核心步驟105
6.4 行為驅動開發106
6.5 突變測試106
6.6 開發週期中的測試107
6.7 小結110
7章用stub進行粗粒度測試111
7.1 stub簡介112
7.2 用stub測試一個HTTP連接113
7.2.1 選擇stub的使用方案115
7.2.2 用Jetty充當嵌入式服務器115
7.3 用stub替換服務器資源117
7.3.1 構建一個stub測試117
7.3.2 回顧一個stub測試120
7.4 替換連接120
7.4.1 創建自定義的URL協議處理器121
7.4.2 創建一個JDK的HttpURLConnection stub 122
7.4.3 運行測試123
7.5 小結124
8章用mock object進行測試125
8.1 mock object簡介125
8.2 用mock object進行單元測試126
8.3 用mock object進行重構129
8.3.1 重構示例130
8.3.2 重構方面的考慮131
8.4 模擬HTTP連接133
8.4.1 mock object的定義133
8.4.2 示例方法的測試134
8.4.3 一個嘗試:簡單的方法重構技巧135
8.4.4 二個嘗試:使用類工廠進行重構137
8.5 把mocks用作特洛伊木馬139
8.6 mock框架簡介141
8.6.1 使用EasyMock 142
8.6.2 使用JMock 146
8.6.3 使用Mockito 150
8.7 小結153
9章容器內測試154
9.1 標准單元測試的局限性154
9.2 mock object解決方法155
9.3 容器內測試的步驟157
9.3.1 實現策略157
9.3.2 容器內測試框架158
9.4 stub、mock object和容器內測試的對比158
9.4.1 對stub的評價159
9.4.2 對mock object的評價159
9.4.3 對容器內測試的評價160
9.5 用Arquillian進行測試161
9.6 小結168

三部分運用JUnit 5及其他工具
10章在Maven 3中運行JUnit測試171
10.1 建立Maven項目171
10.2 使用Maven插件174
10.2.1 Maven的Compiler插件175
10.2.2 Maven的Surefire插件176
10.2.3 用Maven生成HTML格式的JUnit報告178
10.3 集成所有178
10.4 Maven的挑戰性183
10.5 小結183
11章在Gradle 6中運行JUnit測試184
11.1 Gradle簡介184
11.2 創建Gradle項目186
11.3 使用Gradle插件190
11.4 從頭開始創建Gradle項目,再用JUnit 5測試190
11.5 比較Gradle和Maven 194
11.6 小結195
12章IDE對JUnit 5的支持196
12.1 JUnit 5與IntelliJ IDEA集成197
12.2 JUnit 5與Eclipse集成202
12.3 JUnit 5與NetBeans集成206
12.4 JUnit 5與IntelliJ IDEA、Eclipse和NetBeans集成的比較211
12.5 小結211
13章JUnit 5的持續集成212
13.1 持續集成測試212
13.2 Jenkins簡介214
13.3 團隊實踐持續集成217
13.4 配置Jenkins 222
13.5 在CI環境中處理任務225
13.6 小結230

四部分使用現代框架和JUnit 5
14章JUnit 5擴展模型233
14.1 JUnit 5擴展模型簡介233
14.2 創建JUnit 5擴展234
14.3 使用可用的擴展點編寫JUnit 5測試237
14.3.1 將乘客信息持久化到數據庫中237
14.3.2 檢查乘客的性246
14.4 小結248
15章表示層測試249
15.1 選擇測試框架250
15.2 HtmlUnit簡介250
15.3 編寫HtmlUnit測試252
15.3.1 HTML斷言252
15.3.2 對特定的Web瀏覽器進行測試252
15.3.3 對多個Web瀏覽器進行測試253
15.3.4 創建立的測試254
15.3.5 測試表單256
15.3.6 測試JavaScript 257
15.4 Selenium簡介261
15.5 編寫Selenium測試262
15.5.1 對特定的Web瀏覽器進行測試264
15.5.2 使用Web瀏覽器測試導航265
15.5.3 測試多個Web瀏覽器266
15.5.4 用不同的Web瀏覽器測試Google搜索和導航268
15.5.5 測試網站的身份驗證270
15.6 HtmlUnit與Selenium的對比275
15.7 小結275
16章Spring應用程序測試277
16.1 Spring框架簡介277
16.2 依賴注入簡介278
16.3 構建和測試Spring應用程序283
16.3.1 以編程方式創建Spring上下文283
16.3.2 使用Spring TestContext框架286
16.4 為JUnit Jupiter使用SpringExtension 288
16.5 添加新特性並使用JUnit 5測試290
16.6 小結296
17章Spring Boot應用程序測試297
17.1 Spring Boot簡介297
17.2 用Spring Initializr創建項目298
17.3 將Spring應用遷移到Spring Boot中300
17.4 為Spring Boot實現特定測試的配置303
17.5 在Spring Boot應用中添加和測試新特性305
17.6 小結309
18章REST API測試311
18.1 REST應用程序簡介311
18.2 創建RESTful API來管理實體312
18.3 創建RESTful API來管理兩個相關實體319
18.4 測試RESTful API 326
18.5 小結330
19章數據庫應用程序測試331
19.1 數據庫單元測試阻抗不匹配331
19.1.1 單元測試須運行立的代碼332
19.1.2 單元測試須易於編寫和運行332
19.1.3 單元測試須快速運行333
19.2 測試JDBC應用程序333
19.3 測試Spring JDBC應用程序342
19.4 測試Hibernate應用程序349
19.5 測試Spring Hibernate應用程序354
19.6 測試數據庫應用程序的方法比較360
19.7 小結361

五部分用JUnit 5開發應用程序
20章用JUnit 5進行測試驅動開發365
20.1 TDD的主要概念365
20.2 航班管理應用程序366
20.3 將航班管理應用程序遷移到TDD 371
20.4 重構航班管理應用程序375
20.5 使用TDD引入新特性379
20.5.1 增加一種航班379
20.5.2 同一名乘客只能添加一次387
20.6 小結390
21章使用JUnit 5進行行為驅動開發391
21.1 行為驅動開發簡介391
21.1.1 一種新特性的引入392
21.1.2 從需求分析到驗收標準392
21.1.3 BDD的優點和挑戰性393
21.2 使用Cucumber和JUnit 5 作BDD風格394
21.2.1 Cucumber簡介395
21.2.2 將TDD特性遷移到Cucumber中396
21.2.3 使用Cucumber增加一個新功能403
21.3 使用JBehave和JUnit 5 作BDD風格410
21.3.1 JBehave簡介410
21.3.2 將TDD特性遷移到JBehave中410
21.3.3 使用JBehave增加一個新功能416
21.4 Cucumber與Jbehave的比較423
21.5 小結423
22章用JUnit 5實現測試金字塔策略424
22.1 軟件測試的層次424
22.2 單元測試:隔離運行的基本組件425
22.3 集成測試:單元組合435
22.4 系統測試:考查完整的軟件442
22.4.1 使用模擬的外部依賴項進行測試443
22.4.2 使用部分實現的外部依賴項進行測試447
22.4.3 使用完全實現的外部依賴項進行測試449
22.5 驗收測試:軟件滿足業務需求452
22.6 小結461
附錄A Maven 462
A.1 約定優於配置462
A.2 強依賴管理462
A.3 Maven的構建生命週期463
A.4 基於插件的體系結構465
A.5 Maven的項目對像模型466
A.6 安裝Maven 467
附錄B Gradle 468
B.1 安裝Gradle 468
B.2 創建Gradle任務470
附錄C IDE 473
C.1 安裝IntelliJ IDEA 473
C.2 安裝Eclipse 474
C.3 安裝NetBeans 475
附錄D Jenkins 476