新書推薦:
《
狂飙年代:18世纪俄国的新文化和旧文化(第二卷)
》
售價:HK$
177.0
《
万有引力书系 纳粹亿万富翁 德国财富家族的黑暗历史
》
售價:HK$
109.8
《
中国常见植物野外识别手册:青海册
》
售價:HK$
76.2
《
三星堆对话古遗址(从三星堆出发,横跨黄河流域,长江流域,对话11处古遗址,探源多元一体的中华文明)
》
售價:HK$
87.4
《
迷人的化学(迷人的科学丛书)
》
售價:HK$
143.4
《
宋代冠服图志(详尽展示宋代各类冠服 精美插图 考据严谨 细节丰富)
》
售價:HK$
87.4
《
形似神异:什么是中日传统政治文化的结构性差异
》
售價:HK$
55.8
《
养育不好惹的小孩
》
售價:HK$
77.3
|
編輯推薦: |
(1)本书内容全面,竞争力强,结构清晰。本书以普通应用开发者会涉及的知识点为纲要,深入剖析了这些知识点,全面而透彻。 (3)内容丰富,层层递进,便于理解。系统讲解Java 开发者如何进行开发自测,帮助开发人员通过自己先来保证软件的质量。将测试行为提前到进入测试周期前,可以提高提测的成功率,减少开发任务在测试阶段的停留时间,提高迭代效率。 (4)作者资历深厚,拥有多年的开发经验,本书内容是基于作者在工作中的积累整理而成,实战性强。
|
內容簡介: |
本书是一部基于大量自测实践详细介绍如何编写高质量 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 Checkstyle24 2.1.2 FindBugs34 2.1.3 ArchUnit40 2.1.4 OWASP DependencyCheck46 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 Hooks51 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 Rule73 3.4.4 其他技巧74 3.4.5 新手容易犯的错误75 3.5 基于JUnit 5实现测试76 3.5.1 JUnit 5的架构说明76 3.5.2 使用JUnit 577 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 Mockito84 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 Assured127 6.1.2 MariaDB128 6.1.3 DbUnit129 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 模拟第三方API140 6.6.1 使用适配器模式模拟140 6.6.2 WireMock143 6.7 API自动化测试策略150 6.7.1 应用API151 6.7.2 领域API152 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 安装JMeter164 7.2.3 设计测试计划165 7.2.4 执行测试计划170 7.2.5 理解JMeter173 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 理解TDD191 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 Freestyle212 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 Pact244 10.4 为数据迁移脚本编写测试248 10.4.1 Spring Batch248 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
|
|