程序员的测试课
郑晔
开源项目 Moco 作者
18911 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 23 讲
加餐 (1讲)
结束语 (1讲)
程序员的测试课
15
15
1.0x
00:00/00:00
登录|注册

17 | TDD 就是先写测试后写代码吗?

你好,我是郑晔!
到这里,我已经给你介绍了在真实项目中做好测试需要的基础知识。写测试远远不是用 xUnit 框架写代码就能做好的一件事,只有在工作方式、软件设计、编写代码、测试理念等方方面面都做好,我们才能做好测试。不过随之而来的是,我们有了一个强大的测试基础,这可以让我们放心大胆地不断向前,因为我们已经进入到编写高质量代码的正向循环之中。越写测试越安心,越安心也就越有时间编写高质量的代码。
有了这些基础,应对日常工作已经绰绰有余。不过在行业里总有人在探索着更好的做法,所以在最后的扩展篇,我将给你介绍 TDD 和 BDD 两项实践。在你学有余力的情况下,可以挑战一下,让自己再向前走一步。这一讲,我们先来说说 TDD,也就是测试驱动开发(Test Drvien Development)。

TDD 的节奏

或许你已经迫不及待地要举手了:“TDD 我知道,就是先写测试,后写代码。”但真的是这样吗?严格地说,“先写测试、后写代码”的做法叫测试先行开发(Test First Development),而不是测试驱动开发。
测试驱动开发不也是先写测试后写代码吗?二者之间有什么区别呢?
要回答这个问题,我们需要知道 TDD 的一个关键要素,TDD 的节奏:红 - 绿 - 重构
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

测试驱动开发(TDD)不仅仅是一种开发方式,更是一种思维方式,能够帮助开发者不断提高代码质量和开发效率。TDD的节奏是“红-绿-重构”,通过测试驱动开发,不仅能够完成功能,还能够不断改进代码质量。在TDD的过程中,需要先进行任务分解,把大需求拆成小任务,然后考虑代码的可测试性,编写出整洁的代码。TDD不仅在代码层面上写测试,更重要的是在开发过程中如何写测试。无论是否采用TDD的实践,从测试的视角出发看待代码都是非常有价值的一件事,这也是编写高质量代码的重要一环。通过TDD的思维方式,可以拓宽工作思路,不断提高代码质量和开发效率。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员的测试课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • 李威
    TDD是两头驱动:向前驱动出任务分解,软件设计,整洁架构;向后驱动出代码重构,整洁代码。

    作者回复: 这个理解很好

    2021-09-10
    32
  • 阿姆斯壮
    早上下单购买了《修改代码的艺术》。看到了遗留代码的定义。才知道原来这些年自己写的代码,或者是项目中其他“大神”写的代码都是遗留代码。下定决心,为自己以后能高效工作。单元测试代码不能少。沉下心来,学好程序员必备的测试技能。

    作者回复: 原来我也可以带货啊

    2021-09-13
    2
    4
  • CV
    希望老师可以用一个简单的demo,来展示tdd的落地是如何进行的。理论非常动人,但是我个人觉得落地比较困难

    作者回复: 你仔细看看实战,其实就是一个TDD的演示

    2021-09-12
    2
    1
  • sylan215
    不知道开发同学能不能理解,我说一个测试角度的例子。 我面试时,会问一个简单的编码题,就是写一个函数,接收三个参数,分别是 2 个运算数和 1 个运算符,这个函数就把他们做个简单的运算,输出运算结果,其中,运算符只支持加减乘除四则运算。 大部分人写完后,我会继续让他写一下针对这个函数的测试点(测试用例的一句话版本)。 很简单吧? 但是会发现一个现象,比如大部分人设计用例时,都会有一条是「验证输入非法运算符时,输出提示错误」,但是他们的代码里面明明没有对这个逻辑的处理。 这我理解就是没有 TDD 的思想,TDD 除了想着功能要如何实现,还需要考虑会从哪方面「测试」,从而在编码时就可以考虑/设计的很完善。
    2021-09-16
    1
    6
  • aoe
    今天入门了TDD,第一次接触极限编程,感觉离大佬近了点
    2021-11-13
    1
  • terryking
    所以测试驱动开发,首先要有设计,然后再有任务分解,然后才有测试代码,然后再驱动前面的设计,向后驱动具体的实现,保证红绿闭环
    2022-11-21归属地:广东
  • ifelse
    从测试的视角出发看待代码。--记下来
    2022-06-13
  • ifelse
    以前不会也从来没写过测试,看了老师的专栏后,我已经在平时会刻意写一些单元测试了。
    2022-06-13
  • 花花大脸猫
    虽然没有系统的学习过tdd,但是目前写单元测试的流程就是按老师所说。对于其中的任务分解其实还是认知不够明确,目前只能按照自己对于业务的理解主观的拆分,但是对于粒度的把握没有明确的概念,这块希望老师能解答下?
    2022-04-14
  • linfei
    为了写好单元测试,我们需要解决的是代码设计中的依赖耦合问题。而TDD的重构环节,我们要解决的是代码的坏味道。坏味道就多种多样了,用代码扫描工具可以扫出很多来。那么是否有哪些类型的坏味道是需要重点关注的,会造成较大影响的,从而需要优先重构的呢?
    2022-04-13
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部