前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TDD和自动化测试

TDD和自动化测试

原创
作者头像
Johns
修改2022-06-29 10:14:41
9060
修改2022-06-29 10:14:41
举报
文章被收录于专栏:代码工具代码工具

什么是TDD?

TDD 是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。

为什么要 TDD?

image.png
image.png

TDD 的好处

  • 降低开发者负担 通过明确的流程,让我们一次只关注一个点,思维负担更小。
  • 保护网 TDD 的好处是覆盖完全的单元测试,对产品代码提供了一个保护网,让我们可以轻松地迎接需求变化改善代码的设计。 所以如果你的项目需求稳定,一次性做完,后续没有任何改动的话,能享受到 TDD 的好处就比较少了。
  • 提前澄清需求 先写测试可以帮助我们去思考需求,并提前澄清需求细节,而不是代码写到一半才发现不明确的需求。
  • 快速反馈 有很多人说 TDD 时,我的代码量增加了,所以开发效率降低了。 但是,如果没有单元测试,你就要手工测试,你要花很多时间去准备数据,启动应用,跳转界面等,反馈是很慢的。准确说,快速反馈是单元测试的好处。

TDD重要的不是测试代码本身,是解决问题的思维, TDD驱使我们以结果为导向,使得我们简化设计, 注重交付价值流的稳定叠加。

TDD的终极目标是产出干净且可用的代码

TDD要咋么做?

image.png
image.png
image.png
image.png

TDD 的三原则

  • 没有测试之前不要写任何功能代码
  • 一次只写一个刚好失败的测试,作为新加功能的描述
  • 不写任何多余的产品代码,除⾮它刚好能让失败的测试通过

同时TDD也要要遵循测试的FIRST原则

  • F(Fast):测试要能快速运行
  • I(Isolate):测试用例要独立,不能相互依赖
  • R(Repeatable):测试要可以重复运行
  • S(Self-verifying):测试会自己检查产出
  • T(Timely):测试要及时做,与写代码紧密相连

测试用例规范

为了保证TDD的实施效率, 我们在实操前必需先熟悉一下测试用例的编写规范, 这样才能保证我们的测试标准化, 从而为后期自动化测试基础.

golang测试用例规范

案例演示

用户手机号密码登陆服务, 详见附件列表

具体过程详见: TDD案例实战

自动化集成

  • 接口测试自动化可以直接沿用Yapi的自动化测试方案go test -coverprofile=c.out ./... go tool cover -html=c.out -o coverage.html
  • 单元测试则可以在流水线上提前执行

常见问题

为什么很多人做 TDD 都做不起来?

  • 不会合理拆分任务 TDD 之前要拆分任务,把一个大需求拆成多个小需求。
  • 不会写测试 什么是有效的单元测试,有很多人写测试,连到底在测什么都不清楚,也可能连断言都没有,通过控制台输出,肉眼对比来验证。 好的单元测试应该符合简单, 速度快, 包含断言且可以重复执行
  • 不会写刚好的实现 很多人写实现的时候无法专注当前需求,一不小心就把其他需求也实现了,就破坏了节奏感。 实现的时候不会小步快走。
  • 不会重构 不懂什么是 Clean Code,看不出 Smell,没有及时重构,等想要重构时已经难以下手了。 不知道用合适的「手法」消除 Smell。
  • 基础设施落后 对于特定技术栈,没有把单元测试基础设施搭建好,导致写测试时无法专注在测试用例上。 TDD (Test-driven development) 是一种借助自动化测试,并充分发挥其优势的开发模式。如果基础设施不想, 那么TDD反而适得其反.

为什么一定要先写测试,后补测试行不行?

行,但是要写完实现后,马上写测试,用测试来验证实现, 如果测试先行,使用意图驱动编程减少返工

测试代码是否会成为维护的负担?

维护时也遵循 TDD 流程,先修改测试代码成需求变更后的样子,让测试失败,再修改产品代码使其通过。这样你就不是在维护测试用例,而是在利用测试用例。

为什么测试代码要很简单?

当测试代码足够简单时,如果一个测试失败了,就有足够信心断定一定是产品代码的问题。

什么时候不适合 TDD?

如果你是做探索性的技术研究(Spike),不需要长期维护,而且测试基础设施搭建成本很高,那还是手工测试吧。

另外还有「可测试性极差的遗留系统」和「使用测试不友好的技术栈」的系统,做 TDD 可能得不偿失。

参考文献

TDD 開發五步驟,帶你實戰 Test-Driven Development 範例

测试驱动开发(TDD)实践与技巧

TDD案例-重复字符串和冒泡排序

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是TDD?
  • 为什么要 TDD?
  • TDD要咋么做?
  • 测试用例规范
  • 案例演示
  • 自动化集成
  • 常见问题
    • 为什么很多人做 TDD 都做不起来?
      • 为什么一定要先写测试,后补测试行不行?
        • 测试代码是否会成为维护的负担?
          • 为什么测试代码要很简单?
            • 什么时候不适合 TDD?
            • 参考文献
            相关产品与服务
            项目管理
            CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档