Java研发自测入门与进阶

978-7-115-62973-9
作者: 林宁魏兆玉
译者:
编辑: 杨绣国

图书目录:

目录

研发自测基础篇

第 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

详情

本书是一部基于大量自测实践详细介绍如何编写高质量 Java 代码的著作。全书共 11 章,分为三篇。 研发自测基础篇(第 1~6 章),主要介绍了日常工作使用频率最高的基础知识,包括软件测试的基本概念、代码评审的方式、单元测试等内容。为了让测试的编写更容易,这一篇还介绍了测试替身,以及如何与 Spring框架相结合来编写测试等内容。 研发自测高级篇(第 7~10 章),首先介绍了验证程序性能的方法和程序并发安全的相关知识,然后深入讲解了什么是 TDD 和如何为重构编写测试等内容。 源码分析篇(第 11 章),对常见测试框架和库的源码(包括 JUnit、Mockito、JaCoCo 等)进行了分析。通过探究测试框架和库的源码,让读者更为深刻地掌握测试技术。 本书适合 Java 开发人员、负责公司软件质量的相关人员和测试人员阅读。


图书摘要

相关图书

Effective Java中文版(原书第3版)
Effective Java中文版(原书第3版)
Java编程动手学
Java编程动手学
Java开发坑点解析:从根因分析到最佳实践
Java开发坑点解析:从根因分析到最佳实践
Java EE企业级应用开发实战(Spring Boot+Vue+Element)
Java EE企业级应用开发实战(Spring Boot+Vue+Element)
Effective Java (第3版 英文版)
Effective Java (第3版 英文版)
Java核心技术速学版(第3版)
Java核心技术速学版(第3版)

相关文章

相关课程