TDD三定律和5条规则

1. 三定律

  1. 定律一:在编写不能通过的单元测试前,不可编写生产代码
  2. 定律二:只可编写刚好无法通过的单元测试,不能编译也算不通过
  3. 定律三:只可编写刚好足以通过当前失败测试的生产代码

通俗来讲,以上三定律对应如下

  1. 没有用例失败前,不要写生产代码
  2. 如果有用例失败,那就不要继续编写新的失败用例;当有用例失败,应该去修改生产代码,而不是继续编写用例
  3. 仅写能通过当前失败用例的代码,不写跟当前失败用例不相关的代码,但是可以重构

2. 5条规则:F.I.R.S.T.

  1. 快速Fast:测试应该快,也就是执行时间短,能够快速运行。如果执行慢,就不会想要频繁执行;不频繁执行,就不能尽早发现问题;不能尽早发现问题就不能轻易修正,因为发现问题时已经编写了很多了
  2. 独立Independent:测试应该相互独立。某个测试不应为下一个测试设定条件。你应该能够独立的运行每一个测试,及以任何顺序运行测试。当测试互相依赖时,头一个没通过就会导致一连串的测试失败,使问题诊断变得困难,隐藏了下级错误
  3. 可重复Repeatable:测试应该可以在任何环境下执行通过。你应该可以在生产环境、验证环境中重复运行测试,也可以在无网络的环境下使用本地进行测试。如果测试不能在任意环境中运行测试,你就总会有个解释失败的借口;或者当环境条件不具备时无法运行测试
  4. 自足验证Self-Validating:测试应该有布尔值输出。无论是通过还是失败,你不应该通过查看日志文件来确认测试是否同哟。你不应该手工对比两个不同文本文件来确认测试是否通过。如果测试不能自足验证,对失败的判断就会变的依赖主观而运行测试也需要更长的手工操作时间
  5. 及时Timely:测试应该及时编写。单元测试应该恰好在使其通过的生产代码之前进行编写。因为如果在编写生产代码之后进行测试,你会发现生产代码难以测试。你可能会认为某些生产代码本身难以测试。你可能不会去设计可测试的代码。

TDD三定律和5条规则相关推荐

  1. [设计原则与模式] 如何理解TDD的三条规则

    cp from  :  https://blog.csdn.net/ibelieve1974/article/details/54948031 如何理解Bob大叔的TDD三条规则? 第一条和第三条讲的 ...

  2. 智能三定律(1),提出智能三条定律的背景和原因

    前言:智能是重要的智能科学基础概念,如何解读它也一直存在争议,2005年以来,通过对互联网进化规律.标准智能模型与AI智商评测的研究,我们获得了关于智能的新启发与新思考,2020年5月,智能定律初探论 ...

  3. 第三十九期:原生图数据库的15条规则

    不妨看一下原生图形数据库的15条规则.就像复杂的系统网格或空中交通管制图,图形数据库用节点和连接组成的网络(名为标记属性图)来表示.节点显示为圆形或正方形,代表人员.产品.公司或订单等实体. 就像复杂 ...

  4. 机器人守则悖论_第一节:机器人三定律的悖论

    正版?狼 我们经常可以在日常生活中看到一些由电脑控制的工具.在某种程度上,我们有时也把他们称作机器人.在科技日新月异的今天,电脑和机器人的发展几乎可以说是一日千里.也许我们不难想象,在未来的某一天的早 ...

  5. 现实版“机器人三定律”来了? ——浅析欧盟抢先发布人工智能道德准则

    在人类科幻史上,阿西莫夫创立的"机器人三定律"十分的有名,而在现实中,类似的条文似乎已经出现了. 据美国科技网站The Verge的报道,经过52名专家的商讨,欧盟委员会于4月8日 ...

  6. 深度丨如果机器人三定律被打破,我们可以做些什么?

    1942年,阿西莫夫在短篇小说"Runaround"(<环舞>)中首次提出了著名的机器人三定律,来保证机器人会友善待人: 机器人不得伤害人类,或因不作为使人类受到伤害. ...

  7. Delphi面向对象编程的20条规则

    前言 大多数Delphi程序员都像使用Visual Basic 那样使用他们手头上开发工具,而丝毫没有意识到Delphi的强大功能,更谈不上使用这些功能了.(写到这里,编辑惶恐的举起了手,怎么可能呢? ...

  8. go interface转int_24. 图解 Go语言中的反射三定律

    大家好,我是明哥. 由于某些不可抗力,之前该专栏的所有内容都被删除了.因此之后的一段时间内,我会重新发布这些文章,先给已经看过的关注者提个醒. 本文原文:http://golang.iswbm.com ...

  9. ▼▲Delphi面向对象编程的20条规则

    ▼▲Delphi面向对象编程的20条规则(转载) 楼主ZyxIp(绝望中...)2003-09-02 14:28:07 在 Delphi / VCL组件开发及应用 提问 作者简介       Marc ...

最新文章

  1. mysql 快速生成百万条测试数据
  2. 64位操作系统,openCV4.1.1+VS2019参数配置
  3. 史上最详细Docker搭建Redis Cluster集群环境 值得收藏 每步都有图,不用担心学不会
  4. 经信局推荐 | 网易智慧企业多产品入选《杭州市支持企业远程办公助力复工防疫产品和服务目录》!...
  5. 【渝粤教育】国家开放大学2018年春季 0149-21T现代汉语 参考试题
  6. ie ajax异步缓存,IE下发送Ajax请求的缓存问题
  7. 【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好...
  8. Desktop Video for Mac(桌面视频)最新版
  9. 【无标题】CentOS7 安装 向日葵 远程工具
  10. Vue后台管理通用模板
  11. 极客时间马哥教育-云原生训练营第一周作业-20221016
  12. 方舟服务器能不能用ce修改器,方舟生存进化CE修改器代码大全
  13. nivicat破解包安装以及问题解决。MySQL安装版本Navicat连接报错2509解决方案
  14. 【JavaBeans中的属性!】
  15. 用css实现各种导航栏
  16. 一个食品专业本科生的自白:能不吃最好别吃
  17. 华为设备配置PoE功能
  18. 有关计算机病毒的说法中正确的是,以下有关计算机病毒的说法中,正确的是()。A.计算机病毒是一些人为编制的程序B.计算机病毒具有隐蔽...
  19. spring-cloud-stream-binder-rabbit 3.1 消费者无法创建队列
  20. containerd启动过程

热门文章

  1. ggplot绘制箱线图
  2. js和es6高频面试题总结
  3. 【财务】FMS财务管理系统---应收管理
  4. Jmeter将每次测试的结果保存到文件中
  5. 谷歌浏览器上启用flash_如何在任何Web浏览器上启用私人浏览
  6. Android判断手机是否是小米MIUI系统
  7. 【Android归纳】基于XListView的下拉刷新、上拉加载更多的控件分析
  8. 酷冷战神 先手致胜:腾讯ROG游戏手机6为游戏而生
  9. ad19电气规则检查_AD19中PCB设计常用规则-电气规则设置
  10. 安装anaconda出现This Python interpreter is in a conda environment, but the environment has not been acti