- ISBN:9787115629739
- 装帧:平装
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:334
- 出版时间:2024-03-01
- 条形码:9787115629739 ; 978-7-115-62973-9
本书特色
(1)本书内容全面,竞争力强,结构清晰。本书以普通应用开发者会涉及的知识点为纲要,深入剖析了这些知识点,全面而透彻。
(3)内容丰富,层层递进,便于理解。系统讲解Java 开发者如何进行开发自测,帮助开发人员通过自己先来保证软件的质量。将测试行为提前到进入测试周期前,可以提高提测的成功率,减少开发任务在测试阶段的停留时间,提高迭代效率。
(4)作者资历深厚,拥有多年的开发经验,本书内容是基于作者在工作中的积累整理而成,实战性强。
内容简介
本书是一部基于大量自测实践详细介绍如何编写高质量 Java 代码的作品。全书共 11 章,分为三篇。 研发自测基础篇(第 1~6 章),主要介绍了日常工作使用频率高的基础知识,包括软件测试的基本概念、代码评审的方式、单元测试等内容。为了让测试的编写更容易,这一篇还介绍了测试替身,以及如何与 Spring框架相结合来编写测试等内容。 研发自测高级篇(第 7~10 章),首先介绍了验证程序性能的方法和程序并发安全的相关知识,然后深入讲解了什么是 TDD 和如何为重构编写测试等内容。 源码分析篇(第 11 章),对常见测试框架和库的源码(包括 JUnit、Mockito、JaCoCo 等)进行了分析。通过探究测试框架和库的源码,让读者更为深刻地掌握测试技术。 本书适合 Java 开发人员、负责公司软件质量的相关人员和测试人员阅读。
目录
研发自测基础篇
第 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
作者简介
林宁,Thoughtworks 软件工程师、咨询师,目前专注于微服务架构设计、中间件开发和领域驱动设计,有大量的单元测试、API自动化测试等经验。长期从事国内外企业软件开发,熟悉敏捷实践,为国内多家大型企业据供与领域驱动设计和软件建模相关的咨询和培训服务。魏兆玉,Thoughtworks 咨询师,从业10余年,专注于敏捷软件开发,,并为国内外知名企业提供过人才培养服务,其中包含敏捷全栈开发、测试驱动开发、整洁代码与重构、软件设计、敏捷实践以及Web应用安全等方面的人才培养,担任过开发工程师、项目经理和培训师。
-
深度学习的数学
¥43.5¥69.0 -
全图解零基础word excel ppt 应用教程
¥19.0¥48.0 -
机器学习
¥59.4¥108.0 -
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥31.9¥65.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥76.3¥109.0 -
UG NX 12.0数控编程
¥22.1¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
基于3D打印技术的产品创新设计方法
¥45.8¥88.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥83.3¥119.0 -
Visual Basic 语言程序设计基础(第6版)
¥32.0¥45.0