SQ3R阅读法:
Survey:阅读之前的浏览,查阅
 
1、书名:《Pragmatic unit testing:in java with Junit》,中文译名《单元测试之道Java版:使用JUnit》,是作者编著的程序员修炼三部曲中的一部,分别是《Pragmatic Version Control》、《Pragmatic Unit Testing》和《Pragmatic Automation》。
 
2、作者:
关于作者:
Andy Hunt(Andrew Hunt),著名软件开发书籍方面作者,是敏捷软件开发联盟的17位奠基人之一,和搭档David Thomas合著一系列经典书籍:
    《The Pragmatic Programmer》
    《Pragmatic Version Control Using CVS》
    《Pragmatic Unit Testing in Java with JUnit》
    《Pragmatic Unit Testing in C# with Nunit》
    《Pragmatic Thinking and Learning: Refactor Your Wetware》
3、大体内容:
(1)没有介绍junit如何实现, 也没有大篇幅的介绍如何使用junit, 或者介绍junit的一些高级用法; 它讲了做单元测试的一些原则, 单元测试测什么, 什么样的单元测试才是一个好测试。
Question:提出问题
Read:阅读全书
 
第一章 序言(introduction)
1、单元测试的设计目的?
单元测试设计目的并不是为了获得一些更好的整体质量。它并不是一个针对最终用户、项目经理和开发组长的工具;而是有程序员自己来完成,并且最终受益人也是程序员自己。我们为了自身的利益去使用单元测试,从让我们的工作变得更加轻松。
2、什么是单元测试?
单元测试是开发者编写的一小段代码,用于检验被检测代码的一个很小、很精确功能是否正确。
3、执行单元测试的目的?
执行单元测试是为了证明某段代码的行为确实和开发者所期望的一致。
第二章 首个单元测试(your first unit tests)
第三章 使用JUnit编写测试(writing tests in junit)
1、JUnit中的各种断言
(1)assertEuqals([String message],expected,actual)——“[]”中为可选参数;
(2)assertEuqals([String message],expected,actual,tolerance)——tolerance代表容忍度,用于测试精度;
(3)assertNull([String message],Object object)——测试是否为空;
(4)assertNotNull([String message],Object object)——测试是否为空;
(5)assertSame([String message],expected,actual)——测试两个参数是否引用同一对象,不是的话失败;
(6)assertNotSame([String message],expected,actual)——测试两个参数是否引用不同对象;
(7)assertTrue([String message],boolean condition)——验证给定的条件是否为真;
(8)assertFalse([String message],boolean condition)——验证给定的条件是否为假;
(9)fail([String message])——注定会失败,用于标记不应到达的分支;
2、JUnit测试骨架
(1)一个import语句引入所有junit.framework.*下的类;
(2)一个extends语句让你的类从TestCase继承;
(3)一个调用super(String)的构造函数。
第四章 测试哪些内容:Right-BICEP(what to test:Right-BICEP)
1、6个值得首先进行测试的方面?
(1)Right——结果正确与否;
a、如果测试代码运行正确,怎样确实它确实是正确的,而不是看起来是正确的?
  • 使用数据文件——数据尤其可能出错,尤其是手工计算的数据;
(2)B(Boundary)——是否所有的边界条件是正确的;
  • 找出边界条件是做单元测试中最有价值的工作之一,因为bug一般都出现在边界上;
  • 简单的记忆方法:单词CORRECT;
    • Conformance(一致性)——结果是否和预期一致;
    • Ordering(顺序性)——结果是否应该是这样的;
    • Range(区间性)——结果是否位于合理的最小值和最大值之间;
    • Reference(依赖性)——代码是否引用了一些不在代码本身控制范围之内的外部资源;
    • Existence(存在性)——结果是否应该存在;
    • Cardinality(基数性)——是否恰好有足够的值;
    • Time(相对或绝对的时间性)——所有事情的发生是否是有序的,是否是在正确的时刻?是否恰好及时?
(3)I(Inverse)——能查一下反向关联吗?
a、对于一些结果正确与否,我们可以使用反向的逻辑关系来验证。(如检查是否插入了某条数据,可以使用反向逻辑,通过查询该条记录来验证)
(4)C(Cross-Check)——能用其他手段交叉检查一下结果吗;
a、通常来讲,任何一个计算都会有一个以上的算法;可以使用不同的算法来实现交叉检查结果;
(5)E(error Conditions)——是否可以强制错误条件发生;
a、现实世界中各种错误频繁发生,要强制使代码产生错误,已验证对错误事件的处理;
b、一般常见的错误有如下几种:
  • 内存耗光
  • 磁盘用满
  • 时钟出现问题
  • 网络不可用或者出现问题
  • 系统过载
  • 调色板颜色数目有限
  • 显示分辨率过高或过低
(6)P(performance)——是否满足性能要求。
a、确保系统性能问题。
第五章 CORRECT边界条件(CORRECR boundary conditions)
第六章 使用mock对象(Use Mock Objects)
1、单元测试的目标是一次只验证一个方法,但是如果一个方法依赖于其他难以操控的东西,如网络、数据库等,怎么办?——使用mock对象
2、mock对象——真实对象在测试期间的替身!
伪装出真实世界的部分,然后集中精力写好测试部分的代码!
3、使用mock对象时的三个步骤
a、使用一个接口来描述这个对象
b、为产品代码实现这个对象
c、以测试为目的,在mock对象中实现接口
第七章 好的测试具有的特性(properties of good tests)
1、好的测试应该具备的特性——A-TRIP
(1)自动化(Automatic
  • 自动化包括两个方面:调用测试自动化、检查结果自动化
(2)彻底的(Thorough
  • 彻底是指测试了所有的可能情况。
(3)可重复(Repeatable
  • 独立于周围的环境,能够以任意的顺序一次又一次地执行,并且得到相同的结果。
(4)独立的(Independent
  • 对立于其他环境,独立于其他测试。
(5)专业的(Professional
  • 测试代码必须和产品代码一样
第八章 在项目中进行测试(testing on a project)
1、测试代码的存放位置
(1)同一目录
  • 好处:测试代码能够访问产品代码中protected成员变量和函数;
  • 坏处:测试代码混淆在产品代码中。
  • 决策:小项目使用,大项目不能使用;
(2)子目录
  • 好处:测试代码远离产品代码,但不至于很远;
  • 坏处:测试代码和产品代码在不同的包中,不能直接访问protected成员变量和函数;除非测试代码中使用了产品代码的子类,且子类暴露了那些成员;
  • 决策:不建议使用。
(3)并行树
  • 好处:测试代码和产品代码不在混淆在一起;
  • 坏处:测试代码大大远离产品代码;
  • 决策:测试代码都在一个包中,享受了先前的访问权利。建议采用!
2、测试的礼貌
(1)时刻保证测试代码能够正确运行!——无论是独自测试还是与别人一起测试!    
3、测试的时机
(1)编写很函数时;
(2)修正bug后;
(3)每次成功编译后;
(4)每次更新代码后;
(5)持续不断地运行测试;
4、对于遗留代码的测试
(1)对于新编写的代码,同时编写测试代码;
(2)对于已经存在的代码,只对最容易出问题的代码进行测试;
(3)对于此种情况,单元测试的最重要的作用是防止倒退:避免维护性的更正和修缮导致现存功能产生bug。
(4)回归测试至关重要!!
第九章 设计问题(Design Issues)
Recite:复述全文
Review:回顾全书

《Pragmatic unit testing:in java with Junit》阅读相关推荐

  1. 阅读《SentiLARE: Sentiment-Aware Language Representation Learning with Linguistic Knowledge》

    SentiLARE: Sentiment-Aware Language Representation Learning with Linguistic Knowledge Abstract 现有的预训 ...

  2. Align before Fuse: Vision and Language Representation Learning with Momentum Distillation

    ALBEF:Align before Fuse: Vision and Language Representation Learning with Momentum Distillation 论文链接 ...

  3. # 互信息最大化[视角统一]:Align before Fuse: Vision Language Representation Learning with Momentum Distillation

    互信息最大化[视角统一]:Align before Fuse: Vision and Language Representation Learning with Momentum Distillati ...

  4. 【论文模型讲解】VideoBERT: A Joint Model for Video and Language Representation Learning

    文章目录 前言 0 摘要 1 Introduction 2 相关工作 3 模型 3.1 BERT 3.2 VideoBERT 4 实验与分析 4.1 数据集 4.2 视频和语言预处理 4.3 模型预训 ...

  5. [论文学习]TDN: An Integrated Representation Learning Model of Knowledge Graphs

    [论文学习以及翻译]TDN: An Integrated Representation Learning Model of Knowledge Graphs 文章主要内容 摘要 前言 相关工作 基于T ...

  6. Kaiming He论文阅读笔记三——Simple Siamese Representation Learning

    Kaiming He大神在2021年发表的Exploring Simple Siamese Representation Learning,截至目前已经有963的引用,今天我们就一起来阅读一下这篇自监 ...

  7. [论文阅读] iCaRL: Incremental Classifier and Representation Learning

    论文地址:https://openaccess.thecvf.com/content_cvpr_2017/html/Rebuffi_iCaRL_Incremental_Classifier_CVPR_ ...

  8. 自然语言处理学习——论文分享——A Mutual Information Maximization Perspective of Language Representation Learning

    资料放在前面:https://blog.csdn.net/Arnetminer/article/details/105840669 文章的贡献如下: (1)提出了一个基于最大化MI的理论框架来理解词表 ...

  9. CVPR 2020 《12-in-1: Multi-Task Vision and Language Representation Learning》论文笔记

    目录 简介 动机 贡献 方法 实验 简介 本文是在NIPS 2019 ViLBERT上的拓展. 论文链接 动机 本文修改了ViLBERT的预训练过程,有两个小修改:1. 对regions进行mask时 ...

  10. 论文阅读Unsupervised Corpus Aware Language Model Pre-training for Dense Passage Retrieval

    密集文本检索的无监督语料库感知语言模型预训练 ACL2022 论文链接 摘要 最近的研究证明了使用微调语言模型(LM)进行密集检索的有效性.然而,密集检索器很难训练,通常需要经过精心设计的微调管道才能 ...

最新文章

  1. 中职计算机教师个人自我诊改报告,教师自我诊改报告
  2. eWeek: 三巨头Web应用服务对比
  3. python 中 __name__ 的使用
  4. 【渝粤题库】国家开放大学2021春3608矿井水害防治题目
  5. Spring Boot下无法加载主类 org.apache.maven.wrapper.MavenWrapperMain问题解决
  6. Spring Boot笔记-echarts的使用及数据的修改
  7. CodeVs 1017 乘积最大(DP)
  8. 第二阶段团队冲刺(五)
  9. Outlook 邮箱备份操作手册
  10. Word批量转PDF/图片
  11. 伍斯特理工学院计算机,伍斯特理工大学
  12. ElmentUI数据表格 序号
  13. 《烟花》动漫电影 观后感
  14. 靖哥哥教你如果拦截去除弹窗广告
  15. 大数据入门之分布式计算框架Spark(3) -- Spark Streaming
  16. FPGA与普通CPU的区别
  17. Spark 持久化(cache和persist的区别)
  18. 如何宣传Android作为Bluetooth LE外围设备
  19. Cortex-M3 (NXP LPC1788)之RTC
  20. 日历代码 谷歌无法显示当日_在Windows日历中显示您的Google日历

热门文章

  1. navacat 15 premium 导出/导入所有数据库
  2. Web实现:单行文本超出省略强制不换行
  3. 微信小程序禁止页面上下滑动的三个方式
  4. web 实时播放 whammy.js
  5. 2023最新站长必备在线工具箱系统源码 含上百款工具 带后台版本 自适应模板 优化修复版
  6. c语言结构体的用法例子,c语言 结构体 入门
  7. C语言哈夫曼树压缩/解压器
  8. 利用Sublime实现Evernote高亮代码的尝试
  9. 2018 北京科瑞明软件有限公司 ETL岗位笔试题
  10. Python的自动操作(挂机)脚本相关1