TDD 测试驱动开发

缺乏、安全感 2022-01-07 13:27 393阅读 0赞

Kent Beck 提出的TDD。

TDD有三层含义:

Test-Driven Development

Task-Driven Development

Test-Driven Design

编码方式:

  • 先分解任务,分离关注点
  • 列 Example,用实例化需求,澄清需求细节
  • 写test case,只关注需求,程序的输入输出,不关心中间过程
  • 写实现,不考虑别的需求,用最简单的方式满足当前这个小需求即可
  • refactor,用手法消除代码里的坏味道
  • 写完,手动测试一下。有问题补个用例,修复
  • 转QA,有问题,补用例,修复

337063-20190201104645565-803742167.png

红:写一个失败的测试,它是对一个小需求的描述,只需要关心输入输出,这个时候根本不用关心如何实现。

绿:专注在用最快的方式实现当前这个小需求,不用关心其他需求,也不要管代码的质量多么惨不忍睹。
重构:既不用思考需求,也没有实现的压力,只需要找出代码中的坏味道,并用一个手法消除它,让代码变成整洁的代码

注意力控制
人的注意力既可以主动控制,也会被被动吸引。注意力来回切换的话,就会消耗更多精力,思考也会不那么完整。
使用 TDD 开发,我们要主动去控制注意力,写测试的时候,发现一个类没有定义,IDE 提示编译错误,这时候你如果去创建这个类,你的注意力就不在需求上了,已经切换到了实现上,我们应该专注地写完这个测试,思考它是否表达了需求,确定无误后再开始去消除编译错误。

好的单元测试应该符合几条原则:

  • 简单,只测试一个需求
  • 符合 Given-When-Then 格式
  • 速度快
  • 包含断言
  • 可以重复执行

真的什么都会测吗?连 getter 和 setter 也会测试吗?

Kent Beck 说:公司请我来是为了实现业务价值,而不是写测试代码。
所以我只在没有信心的地方写测试代码。

TDD 要不要做提前设计呢?

Kent Beck 不做提前设计,他会选一个最简单的用例,直接开写,用最简单的代码通过测试。逐渐增加测试,让代码变复杂,用重构来驱动出设计。

TTD中要求写完一个test case后,在代码里做到快速实现。我觉得这一点也很关键。先用hard code做出来,然后测试通过后,再去关注具体实现。代码的每次改动后就跑一次测试。完全省去了,写完一长串代码后,跑不起来,再加断点debug省时间和精力。

实例请参考:

https://www.jianshu.com/p/62f16cd4fef3

在视频里看到现场写代码,才能对TDD有形象和深刻的理解

转载于:https://www.cnblogs.com/Gift/p/10344982.html

发表评论

表情:
评论列表 (有 0 条评论,393人围观)

还没有评论,来说两句吧...

相关阅读

    相关 测试驱动开发(TDD)的理论基础

    开始理论介绍之前,先思考一个问题:**软件开发中最重要的是什么?** * 可能有的小伙伴就会说:良好的数据库设计,一个健壮可扩展的架构,规范的编码风格,设计文档等。...

    相关 TDD测试驱动开发

    TDD(Test-Driven Development)是敏捷开发中的一项核心实践和技术,也是一种设计方法论,其基本思想是:在明确要开发某个功能后,在开发功能代码之前,

    相关 TDD (test driver development)测试驱动开发

    \\为什么需要测试驱动/或者说需要单元测试 我们工作接触的软件项目,不是学生时代,玩一玩就不管了,工作的项目,需要长期维护,并且随着时间的推移需要增加新的需求,进行修改,优化