Java研發自測入門與進階

林寧、魏兆玉

  • 出版商: 人民郵電
  • 出版日期: 2024-03-01
  • 定價: $539
  • 售價: 8.5$458
  • 語言: 簡體中文
  • 頁數: 334
  • ISBN: 7115629730
  • ISBN-13: 9787115629739
  • 下單後立即進貨 (約2週~3週)

  • Java研發自測入門與進階-preview-1
  • Java研發自測入門與進階-preview-2
Java研發自測入門與進階-preview-1

商品描述

本書是一部基於大量自測實踐詳細介紹如何編寫高質量 Java 代碼的作品。全書共 11 章,分為三篇。

研發自測基礎篇(第 1~6 章),主要介紹了日常工作使用頻率高的基礎知識,包括軟件測試的基本概念、代碼評審的方式、單元測試等內容。為了讓測試的編寫更容易,這一篇還介紹了測試替身,以及如何與 Spring框架相結合來編寫測試等內容。

研發自測高級篇(第 7~10 章),首先介紹了驗證程序性能的方法和程序並發安全的相關知識,然後深入講解了什麽是 TDD 和如何為重構編寫測試等內容。

源碼分析篇(第 11 章),對常見測試框架和庫的源碼(包括 JUnit、Mockito、JaCoCo 等)進行了分析。通過探究測試框架和庫的源碼,讓讀者更為深刻地掌握測試技術。

本書適合 Java 開發人員、負責公司軟件質量的相關人員和測試人員閱讀。

作者簡介

林宁,Thoughtworks 软件工程师、咨询师,目前专注于微服务架构设计、中间件开发和领域驱动设计,有大量的单元测试、API自动化测试等经验。长期从事国内外企业软件开发,熟悉敏捷实践,为国内多家大型企业据供与领域驱动设计和软件建模相关的咨询和培训服务。

魏兆玉,Thoughtworks 咨询师,从业10余年,专注于敏捷软件开发,,并为国内外知名企业提供过人才培养服务,其中包含敏捷全栈开发、测试驱动开发、整洁代码与重构、软件设计、敏捷实践以及Web应用安全等方面的人才培养,担任过开发工程师、项目经理和培训师。

目錄大綱

目錄

研發自測基礎篇

第 1章 研發自測基礎 3

1.1 軟件測試的基本概念 3

1.1.1 軟件測試 3

1.1.2 缺陷 4

1.1.3 測試用例 5

1.1.4 測試金字塔 6

1.1.5 測試策略 7

1.1.6 測試左移和測試右移 8

1.1.7 質量度量 8

1.2 軟件的測試分類 10

1.2.1 單元測試 10

1.2.2 集成測試 11

1.2.3 系統測試 11

1.2.4 驗收測試 11

1.2.5 靜態代碼分析 12

1.2.6 安全測試 12

1.2.7 性能測試 12

1.3 測試用例設計入門 13

1.3.1 劃分等價類 13

1.3.2 邊界值分析法 14

1.3.3 場景法 15

1.4 開發人員自測範圍 16

1.4.1 新交付的需求 18

1.4.2 缺陷處理 18

1.4.3 重構 18

1.4.4 數據遷移 18

1.5 測試數據的構造和安全 18

1.5.1 高效構造測試數據 19

1.5.2 測試數據的安全 21

1.6 小結 22

第 2章 代碼評審 23

2.1 常用的靜態代碼分析工具 24

2.1.1 Checkstyle 24

2.1.2 FindBugs 34

2.1.3 ArchUnit 40

2.1.4 OWASP DependencyCheck 46

2.2 人工代碼評審 47

2.2.1 代碼評審的場景 47

2.2.2 代碼評審的工具 48

2.2.3 代碼評審的註意事項 48

2.2.4 Java代碼評審清單 50

2.3 Git工作流和保護 50

2.3.1 Git工作流 50

2.3.2 Git Hooks 51

2.3.3 分支保護 53

2.4 小結 53

第3章 單元測試基礎 55

3.1 單元測試 55

3.1.1 什麽是單元測試 55

3.1.2 為什麽需要單元測試 56

3.1.3 怎麽學習單元測試 56

3.1.4 搭建JUnit環境 57

3.1.5 給“Hello, world!”寫一個單元測試 58

3.2 斷言 59

3.2.1 編寫一個簡單的斷言庫 60

3.2.2 JUnit內置的斷言方法 60

3.2.3 使用assertThat和Matcher方法 61

3.2.4 編寫自己的Matcher方法 63

3.2.5 斷言並不只是單元測試中的概念 63

3.2.6 思考題 64

3.3 單元測試的設計 64

3.3.1 準備並清理測試數據 65

3.3.2 設計單元測試用例 66

3.3.3 參數化單元測試用例 69

3.4 單元測試的使用技巧 70

3.4.1 測試異常 70

3.4.2 測試覆蓋率 72

3.4.3 使用JUnit Rule 73

3.4.4 其他技巧 74

3.4.5 新手容易犯的錯誤 75

3.5 基於JUnit 5實現測試 76

3.5.1 JUnit 5的架構說明 76

3.5.2 使用JUnit 5 77

3.5.3 更強的斷言能力 78

3.5.4 嵌套測試 78

3.5.5 拓展的變化 80

3.6 Java單元測試的原則和約定 80

3.6.1 FIRST原則 80

3.6.2 單元測試的約定 81

3.7 小結 81

第4章 測試替身 82

4.1 測試替身簡介 82

4.2 Mockito 84

4.2.1 使用mock方法 85

4.2.2 捕捉參數對象 87

4.2.3 設置模擬對象的行為 88

4.2.4 參數匹配器 89

4.2.5 使用spy方法 90

4.2.6 使用註解 91

4.2.7 其他技巧 93

4.3 增強測試:靜態、私有方法的處理 94

4.3.1 模擬靜態方法 94

4.3.2 模擬構造方法 97

4.3.3 模擬私有方法 98

4.3.4 反射工具箱 99

4.4 測試代碼的結構模式 100

4.4.1 準備-執行-斷言 100

4.4.2 四階段測試 100

4.5 基於測試替身的反思 101

4.5.1 “大泥球” 101

4.5.2 分層過多 102

4.5.3 濫用測試替身 102

4.6 小結 103

第5章 Spring應用的測試 104

5.1 理解Spring測試體系 105

5.2 啟動Spring上下文測試 106

5.3 啟動Spring Boot上下文測試 109

5.3.1 @SpringBootTest註解 109

5.3.2 對Bean的模擬和監視 112

5.3.3 Spring Boot切片配置 113

5.4 分層測試和測試策略 117

5.4.1 分層測試策略 117

5.4.2 MockMvc的執行原理 118

5.4.3 內嵌基礎設施 120

5.5 常用的測試工具集 122

5.5.1 Spring Test庫提供的工具集 122

5.5.2 spring-boot-test庫提供的工具集 123

5.6 小結 125

第6章 RESTful API測試 126

6.1 RESTful API測試工具集 126

6.1.1 REST Assured 127

6.1.2 MariaDB 128

6.1.3 DbUnit 129

6.2 API測試實例 131

6.3 使用JsonPath斷言 136

6.4 鑒權 138

6.4.1 Basic鑒權 138

6.4.2 Token鑒權 138

6.4.3 Cookie鑒權 139

6.5 文件處理 140

6.6 模擬第三方API 140

6.6.1 使用適配器模式模擬 140

6.6.2 WireMock 143

6.7 API自動化測試策略 150

6.7.1 應用API 151

6.7.2 領域API 152

6.8 小結 154

研發自測高級篇

第7章 性能和並發檢測 157

7.1 微基準性能測試 158

7.1.1 使用Maven構建微基準性能測試 158

7.1.2 一個直觀的示例 160

7.1.3 使用JUnit運行微基準性能測試 161

7.2 API性能測試 163

7.2.1 JMeter介紹 163

7.2.2 安裝JMeter 164

7.2.3 設計測試計劃 165

7.2.4 執行測試計劃 170

7.2.5 理解JMeter 173

7.3 並發檢測 176

7.3.1 幾種並發模型 176

7.3.2 並發問題類型 180

7.3.3 並發測試技術 181

7.3.4 並發問題的檢測實例 182

7.4 小結 190

第8章 測試驅動開發 191

8.1 理解TDD 191

8.1.1 TDD的多重含義 191

8.1.2 TDD的操作過程 192

8.1.3 TDD的價值 193

8.2 TDD的操作指南 193

8.3 TDD的實例演示 195

8.3.1 任務拆解和環境搭建 195

8.3.2 第 一輪任務 196

8.3.3 第二輪任務 198

8.3.4 第三輪任務 199

8.4 使用TDD的技巧 201

8.4.1 任務的拆解技巧 201

8.4.2 善於使用快捷鍵 202

8.4.3 只為必要的代碼編寫測試 203

8.5 總結 203

第9章 測試工程化 204

9.1 測試工程化簡介 204

9.2 搭建構建平臺 206

9.2.1 CI/CD工具選型 206

9.2.2 使用Jenkins搭建構建平臺 207

9.2.3 Jenkins插件的介紹 208

9.3 創建Jenkins項目 212

9.3.1 Freestyle 212

9.3.2 普通流水線 218

9.3.3 多分支流水線 223

9.3.4 並行流水線 227

9.4 配置測試報告發布工具並統計測試覆蓋率 228

9.4.1 配置測試報告發布工具 229

9.4.2 統計Java測試覆蓋率 231

9.5 小結 235

第 10章 測試守護重構 236

10.1 理解接口 237

10.2 守護“類”級別的重構 239

10.2.1 提取測試數據 240

10.2.2 參考測試覆蓋率 241

10.3 使用契約測試保護API重構 242

10.3.1 契約測試介紹 242

10.3.2 Pact 244

10.4 為數據遷移腳本編寫測試 248

10.4.1 Spring Batch 248

10.4.2 為Spring Batch腳本編寫測試 252

10.4.3 Reader、Writer和Processor的測試說明 254

10.5 漸進式重構 255

10.5.1 特性開關 255

10.5.2 灰度開關 265

10.5.3 切換 266

10.5.4 數據雙寫 267

10.5.5 關於特性開關的測試策略 269

10.6 小結 269

源碼分析篇

第 11章 測試框架的源碼分析 273

11.1 源碼分析的技巧 273

11.2 JUnit源碼分析 274

11.2.1 使用命令行方式運行測試 274

11.2.2 IntelliJ IDEA引導JUnit運行的原理 277

11.2.3 JUnitCore的分析 282

11.2.4 JUnit4 Runner的分析 283

11.2.5 斷言分析 289

11.2.6 完成JUnit源碼分析的收獲 290

11.3 Mockito的源碼分析 292

11.3.1 針對mock方法的分析 292

11.3.2 針對when方法的分析 297

11.3.3 針對verify方法的分析 300

11.4 JaCoCo的源碼分析 301

11.4.1 Java agent的基本用法 302

11.4.2 Java agent的調試方法 310

11.4.3 JaCoCo agent的啟動原理 312

11.4.4 JaCoCo探針的插樁過程 316

11.4.5 IntelliJ IDEA測試覆蓋率的實現 327

11.5 小結 327

附錄A 測試策略模板 329

附錄B 測試反模式 332