Java研發(fā)自測(cè)入門(mén)與進(jìn)階
定 價(jià):89.8 元
- 作者:林寧、魏兆玉
- 出版時(shí)間:2024/3/1
- ISBN:9787115629739
- 出 版 社:人民郵電出版社
- 中圖法分類(lèi):TP312.8JA
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:128開(kāi)
本書(shū)是一部基于大量自測(cè)實(shí)踐詳細(xì)介紹如何編寫(xiě)高質(zhì)量 Java 代碼的作品。全書(shū)共 11 章,分為三篇。
研發(fā)自測(cè)基礎(chǔ)篇(第 1~6 章),主要介紹了日常工作使用頻率高的基礎(chǔ)知識(shí),包括軟件測(cè)試的基本概念、代碼評(píng)審的方式、單元測(cè)試等內(nèi)容。為了讓測(cè)試的編寫(xiě)更容易,這一篇還介紹了測(cè)試替身,以及如何與 Spring框架相結(jié)合來(lái)編寫(xiě)測(cè)試等內(nèi)容。
研發(fā)自測(cè)高級(jí)篇(第 7~10 章),首先介紹了驗(yàn)證程序性能的方法和程序并發(fā)安全的相關(guān)知識(shí),然后深入講解了什么是 TDD 和如何為重構(gòu)編寫(xiě)測(cè)試等內(nèi)容。
源碼分析篇(第 11 章),對(duì)常見(jiàn)測(cè)試框架和庫(kù)的源碼(包括 JUnit、Mockito、JaCoCo 等)進(jìn)行了分析。通過(guò)探究測(cè)試框架和庫(kù)的源碼,讓讀者更為深刻地掌握測(cè)試技術(shù)。
本書(shū)適合 Java 開(kāi)發(fā)人員、負(fù)責(zé)公司軟件質(zhì)量的相關(guān)人員和測(cè)試人員閱讀。
(1)本書(shū)內(nèi)容全面,競(jìng)爭(zhēng)力強(qiáng),結(jié)構(gòu)清晰。本書(shū)以普通應(yīng)用開(kāi)發(fā)者會(huì)涉及的知識(shí)點(diǎn)為綱要,深入剖析了這些知識(shí)點(diǎn),全面而透徹。
(3)內(nèi)容豐富,層層遞進(jìn),便于理解。系統(tǒng)講解Java 開(kāi)發(fā)者如何進(jìn)行開(kāi)發(fā)自測(cè),幫助開(kāi)發(fā)人員通過(guò)自己先來(lái)保證軟件的質(zhì)量。將測(cè)試行為提前到進(jìn)入測(cè)試周期前,可以提高提測(cè)的成功率,減少開(kāi)發(fā)任務(wù)在測(cè)試階段的停留時(shí)間,提高迭代效率。
(4)作者資歷深厚,擁有多年的開(kāi)發(fā)經(jīng)驗(yàn),本書(shū)內(nèi)容是基于作者在工作中的積累整理而成,實(shí)戰(zhàn)性強(qiáng)。
林寧,Thoughtworks 軟件工程師、咨詢(xún)師,目前專(zhuān)注于微服務(wù)架構(gòu)設(shè)計(jì)、中間件開(kāi)發(fā)和領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),有大量的單元測(cè)試、API自動(dòng)化測(cè)試等經(jīng)驗(yàn)。長(zhǎng)期從事國(guó)內(nèi)外企業(yè)軟件開(kāi)發(fā),熟悉敏捷實(shí)踐,為國(guó)內(nèi)多家大型企業(yè)據(jù)供與領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)和軟件建模相關(guān)的咨詢(xún)和培訓(xùn)服務(wù)。
魏兆玉,Thoughtworks 咨詢(xún)師,從業(yè)10余年,專(zhuān)注于敏捷軟件開(kāi)發(fā),,并為國(guó)內(nèi)外知名企業(yè)提供過(guò)人才培養(yǎng)服務(wù),其中包含敏捷全棧開(kāi)發(fā)、測(cè)試驅(qū)動(dòng)開(kāi)發(fā)、整潔代碼與重構(gòu)、軟件設(shè)計(jì)、敏捷實(shí)踐以及Web應(yīng)用安全等方面的人才培養(yǎng),擔(dān)任過(guò)開(kāi)發(fā)工程師、項(xiàng)目經(jīng)理和培訓(xùn)師。
目錄
研發(fā)自測(cè)基礎(chǔ)篇
第 1章 研發(fā)自測(cè)基礎(chǔ)3
1.1 軟件測(cè)試的基本概念3
1.1.1 軟件測(cè)試3
1.1.2 缺陷4
1.1.3 測(cè)試用例5
1.1.4 測(cè)試金字塔6
1.1.5 測(cè)試策略7
1.1.6 測(cè)試左移和測(cè)試右移8
1.1.7 質(zhì)量度量8
1.2 軟件的測(cè)試分類(lèi)10
1.2.1 單元測(cè)試10
1.2.2 集成測(cè)試11
1.2.3 系統(tǒng)測(cè)試11
1.2.4 驗(yàn)收測(cè)試11
1.2.5 靜態(tài)代碼分析12
1.2.6 安全測(cè)試12
1.2.7 性能測(cè)試12
1.3 測(cè)試用例設(shè)計(jì)入門(mén)13
1.3.1 劃分等價(jià)類(lèi)13
1.3.2 邊界值分析法14
1.3.3 場(chǎng)景法15
1.4 開(kāi)發(fā)人員自測(cè)范圍16
1.4.1 新交付的需求18
1.4.2 缺陷處理18
1.4.3 重構(gòu)18
1.4.4 數(shù)據(jù)遷移18
1.5 測(cè)試數(shù)據(jù)的構(gòu)造和安全18
1.5.1 高效構(gòu)造測(cè)試數(shù)據(jù)19
1.5.2 測(cè)試數(shù)據(jù)的安全21
1.6 小結(jié)22
第 2章 代碼評(píng)審23
2.1 常用的靜態(tài)代碼分析工具24
2.1.1 Checkstyle24
2.1.2 FindBugs34
2.1.3 ArchUnit40
2.1.4 OWASP DependencyCheck46
2.2 人工代碼評(píng)審47
2.2.1 代碼評(píng)審的場(chǎng)景47
2.2.2 代碼評(píng)審的工具48
2.2.3 代碼評(píng)審的注意事項(xiàng)48
2.2.4 Java代碼評(píng)審清單50
2.3 Git工作流和保護(hù)50
2.3.1 Git工作流50
2.3.2 Git Hooks51
2.3.3 分支保護(hù)53
2.4 小結(jié)53
第3章 單元測(cè)試基礎(chǔ)55
3.1 單元測(cè)試55
3.1.1 什么是單元測(cè)試55
3.1.2 為什么需要單元測(cè)試56
3.1.3 怎么學(xué)習(xí)單元測(cè)試56
3.1.4 搭建JUnit環(huán)境57
3.1.5 給“Hello, world!”寫(xiě)一個(gè)單元測(cè)試58
3.2 斷言59
3.2.1 編寫(xiě)一個(gè)簡(jiǎn)單的斷言庫(kù)60
3.2.2 JUnit內(nèi)置的斷言方法60
3.2.3 使用assertThat和Matcher方法61
3.2.4 編寫(xiě)自己的Matcher方法63
3.2.5 斷言并不只是單元測(cè)試中的概念63
3.2.6 思考題64
3.3 單元測(cè)試的設(shè)計(jì)64
3.3.1 準(zhǔn)備并清理測(cè)試數(shù)據(jù)65
3.3.2 設(shè)計(jì)單元測(cè)試用例66
3.3.3 參數(shù)化單元測(cè)試用例69
3.4 單元測(cè)試的使用技巧70
3.4.1 測(cè)試異常70
3.4.2 測(cè)試覆蓋率72
3.4.3 使用JUnit Rule73
3.4.4 其他技巧74
3.4.5 新手容易犯的錯(cuò)誤75
3.5 基于JUnit 5實(shí)現(xiàn)測(cè)試76
3.5.1 JUnit 5的架構(gòu)說(shuō)明76
3.5.2 使用JUnit 577
3.5.3 更強(qiáng)的斷言能力78
3.5.4 嵌套測(cè)試78
3.5.5 拓展的變化80
3.6 Java單元測(cè)試的原則和約定80
3.6.1 FIRST原則80
3.6.2 單元測(cè)試的約定81
3.7 小結(jié)81
第4章 測(cè)試替身82
4.1 測(cè)試替身簡(jiǎn)介82
4.2 Mockito84
4.2.1 使用mock方法85
4.2.2 捕捉參數(shù)對(duì)象87
4.2.3 設(shè)置模擬對(duì)象的行為88
4.2.4 參數(shù)匹配器89
4.2.5 使用spy方法90
4.2.6 使用注解91
4.2.7 其他技巧93
4.3 增強(qiáng)測(cè)試:靜態(tài)、私有方法的處理94
4.3.1 模擬靜態(tài)方法94
4.3.2 模擬構(gòu)造方法97
4.3.3 模擬私有方法98
4.3.4 反射工具箱99
4.4 測(cè)試代碼的結(jié)構(gòu)模式100
4.4.1 準(zhǔn)備-執(zhí)行-斷言100
4.4.2 四階段測(cè)試100
4.5 基于測(cè)試替身的反思101
4.5.1 “大泥球”101
4.5.2 分層過(guò)多102
4.5.3 濫用測(cè)試替身102
4.6 小結(jié)103
第5章 Spring應(yīng)用的測(cè)試104
5.1 理解Spring測(cè)試體系105
5.2 啟動(dòng)Spring上下文測(cè)試106
5.3 啟動(dòng)Spring Boot上下文測(cè)試109
5.3.1 @SpringBootTest注解109
5.3.2 對(duì)Bean的模擬和監(jiān)視112
5.3.3 Spring Boot切片配置113
5.4 分層測(cè)試和測(cè)試策略117
5.4.1 分層測(cè)試策略117
5.4.2 MockMvc的執(zhí)行原理118
5.4.3 內(nèi)嵌基礎(chǔ)設(shè)施120
5.5 常用的測(cè)試工具集122
5.5.1 Spring Test庫(kù)提供的工具集122
5.5.2 spring-boot-test庫(kù)提供的工具集123
5.6 小結(jié)125
第6章 RESTful API測(cè)試126
6.1 RESTful API測(cè)試工具集126
6.1.1 REST Assured127
6.1.2 MariaDB128
6.1.3 DbUnit129
6.2 API測(cè)試實(shí)例131
6.3 使用JsonPath斷言136
6.4 鑒權(quán)138
6.4.1 Basic鑒權(quán)138
6.4.2 Token鑒權(quán)138
6.4.3 Cookie鑒權(quán)139
6.5 文件處理140
6.6 模擬第三方API140
6.6.1 使用適配器模式模擬140
6.6.2 WireMock143
6.7 API自動(dòng)化測(cè)試策略150
6.7.1 應(yīng)用API151
6.7.2 領(lǐng)域API152
6.8 小結(jié)154
研發(fā)自測(cè)高級(jí)篇
第7章 性能和并發(fā)檢測(cè)157
7.1 微基準(zhǔn)性能測(cè)試158
7.1.1 使用Maven構(gòu)建微基準(zhǔn)性能測(cè)試158
7.1.2 一個(gè)直觀的示例160
7.1.3 使用JUnit運(yùn)行微基準(zhǔn)性能測(cè)試161
7.2 API性能測(cè)試163
7.2.1 JMeter介紹163
7.2.2 安裝JMeter164
7.2.3 設(shè)計(jì)測(cè)試計(jì)劃165
7.2.4 執(zhí)行測(cè)試計(jì)劃170
7.2.5 理解JMeter173
7.3 并發(fā)檢測(cè)176
7.3.1 幾種并發(fā)模型176
7.3.2 并發(fā)問(wèn)題類(lèi)型180
7.3.3 并發(fā)測(cè)試技術(shù)181
7.3.4 并發(fā)問(wèn)題的檢測(cè)實(shí)例182
7.4 小結(jié)190
第8章 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)191
8.1 理解TDD191
8.1.1 TDD的多重含義191
8.1.2 TDD的操作過(guò)程192
8.1.3 TDD的價(jià)值193
8.2 TDD的操作指南193
8.3 TDD的實(shí)例演示195
8.3.1 任務(wù)拆解和環(huán)境搭建195
8.3.2 第 一輪任務(wù)196
8.3.3 第二輪任務(wù)198
8.3.4 第三輪任務(wù)199
8.4 使用TDD的技巧201
8.4.1 任務(wù)的拆解技巧201
8.4.2 善于使用快捷鍵202
8.4.3 只為必要的代碼編寫(xiě)測(cè)試203
8.5 總結(jié)203
第9章 測(cè)試工程化204
9.1 測(cè)試工程化簡(jiǎn)介204
9.2 搭建構(gòu)建平臺(tái)206
9.2.1 CI/CD工具選型206
9.2.2 使用Jenkins搭建構(gòu)建平臺(tái)207
9.2.3 Jenkins插件的介紹208
9.3 創(chuàng)建Jenkins項(xiàng)目212
9.3.1 Freestyle212
9.3.2 普通流水線(xiàn)218
9.3.3 多分支流水線(xiàn)223
9.3.4 并行流水線(xiàn)227
9.4 配置測(cè)試報(bào)告發(fā)布工具并統(tǒng)計(jì)測(cè)試覆蓋率228
9.4.1 配置測(cè)試報(bào)告發(fā)布工具229
9.4.2 統(tǒng)計(jì)Java測(cè)試覆蓋率231
9.5 小結(jié)235
第 10章 測(cè)試守護(hù)重構(gòu)236
10.1 理解接口237
10.2 守護(hù)“類(lèi)”級(jí)別的重構(gòu)239
10.2.1 提取測(cè)試數(shù)據(jù)240
10.2.2 參考測(cè)試覆蓋率241
10.3 使用契約測(cè)試保護(hù)API重構(gòu)242
10.3.1 契約測(cè)試介紹242
10.3.2 Pact244
10.4 為數(shù)據(jù)遷移腳本編寫(xiě)測(cè)試248
10.4.1 Spring Batch248
10.4.2 為Spring Batch腳本編寫(xiě)測(cè)試252
10.4.3 Reader、Writer和Processor的測(cè)試說(shuō)明254
10.5 漸進(jìn)式重構(gòu)255
10.5.1 特性開(kāi)關(guān)255
10.5.2 灰度開(kāi)關(guān)265
10.5.3 切換266
10.5.4 數(shù)據(jù)雙寫(xiě)267
10.5.5 關(guān)于特性開(kāi)關(guān)的測(cè)試策略269
10.6 小結(jié)269
源碼分析篇
第 11章 測(cè)試框架的源碼分析273
11.1 源碼分析的技巧273
11.2 JUnit源碼分析274
11.2.1 使用命令行方式運(yùn)行測(cè)試274
11.2.2 IntelliJ IDEA引導(dǎo)JUnit運(yùn)行的原理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 針對(duì)mock方法的分析292
11.3.2 針對(duì)when方法的分析297
11.3.3 針對(duì)verify方法的分析300
11.4 JaCoCo的源碼分析301
11.4.1 Java agent的基本用法302
11.4.2 Java agent的調(diào)試方法310
11.4.3 JaCoCo agent的啟動(dòng)原理312
11.4.4 JaCoCo探針的插樁過(guò)程316
11.4.5 IntelliJ IDEA測(cè)試覆蓋率的實(shí)現(xiàn)327
11.5 小結(jié)327
附錄A 測(cè)試策略模板329
附錄B 測(cè)試反模式332