徐昊 · TDD 项目实战 70 讲
徐昊
Thoughtworks 中国区 CTO
18159 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已完结/共 88 讲
实战项目二|RESTful开发框架:依赖注入容器 (24讲)
实战项目三|RESTful Web Services (44讲)
徐昊 · TDD 项目实战 70 讲
15
15
1.0x
00:00/00:00
登录|注册

03|TDD演示(3):按测试策略重组测试

你好,我是徐昊。今天我们来继续进行命令行参数解析的 TDD 演示。
首先让我们回顾一下题目与需求与代码进度。如前所述,题目源自 Bob 大叔的 Clean Code 第十四章:
我们中的大多数人都不得不时不时地解析一下命令行参数。如果我们没有一个方便的工具,那么我们就简单地处理一下传入 main 函数的字符串数组。有很多开源工具可以完成这个任务,但它们可能并不能完全满足我们的要求。所以我们再写一个吧。
 
传递给程序的参数由标志和值组成。标志应该是一个字符,前面有一个减号。每个标志都应该有零个或多个与之相关的值。例如:
 
-l -p 8080 -d /usr/logs
 
“l”(日志)没有相关的值,它是一个布尔标志,如果存在则为 true,不存在则为 false。“p”(端口)有一个整数值,“d”(目录)有一个字符串值。标志后面如果存在多个值,则该标志表示一个列表:
 
-g this is a list -d 1 2 -3 5
 
"g"表示一个字符串列表[“this”, “is”, “a”, “list”],“d"标志表示一个整数列表[1, 2, -3, 5]。
 
如果参数中没有指定某个标志,那么解析器应该指定一个默认值。例如,false 代表布尔值,0 代表数字,”"代表字符串,[]代表列表。如果给出的参数与模式不匹配,重要的是给出一个好的错误信息,准确地解释什么是错误的。
 
确保你的代码是可扩展的,即如何增加新的数值类型是直接和明显的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

徐昊在本文中进行了TDD演示,重点讲解了按测试策略重组测试的过程。文章以命令行参数解析为例,展示了如何通过红/绿/重构循环与任务列表互动,指导进行测试驱动开发。作者首先回顾了需求与代码进度,然后展示了如何根据任务列表进行功能点的完成、发现坏味道并进行重构、引入新组件改变架构,以及根据代码结构、测试策略和代码实现情况动态调整任务列表。通过不断的红/绿循环和任务列表的调整,作者展示了如何完成功能点、重组测试、进行代码审查并修复缺陷,最终得到了健壮、清晰、可扩展的代码结构。文章强调了任务列表的重要性,它记录了认知的改变过程,体现了最新的认知。下节课将继续完成命令行列表标志的功能,继续进行任务分解与红/绿/重构循环。整体而言,本文通过具体的案例向读者展示了TDD的实际应用,以及如何通过任务列表指导开发过程,对于想要了解TDD实践的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《徐昊 · TDD 项目实战 70 讲》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • 🐑
    置顶
    大家好~我是TDD这门课的编辑辰洋~ 🎐我来友情提示一下下~ 01-04是视频演示,好对TDD有个感性的认识。 05-10是对演示的复盘,同时也会讲解TDD的相关知识点。比如测试的基本结构,TDD中的测试是啥~ 所以,如果你在01-04的操作卡壳了,可以从05开始学,看看5-10,这才是重点哇。看完再回头去看01-04~
    2022-03-22
    5
  • wenming
    置顶
    老师,任务列表里面的 Corner case 部分,除了代码审查发现,还有没有其他办法能够避免遗漏导致 BUG 呢?

    作者回复: 一般遗漏是"你不知道自己不知道” 所以很难避免 更多需要交叉检验 比如结对编程 或者 code review

    2022-03-21
    8
  • 临风
    测试代码也是需要重构的,之前一直没有意识到这点,觉得就算有点冗余也没关系。但实际上,只要是多余的代码就意味着团队的负债,会增加编译成本、跑用例的时间成本(这两项影响不大),更重要的是影响理解的成本,好的测试,就应该通过测试用例就能清晰的理解业务逻辑,而不是一行一行的去看代码。 学习了几讲后,越发觉得TDD其实是一种内功修炼,无论你的水平是多少,都是可以通过TDD不断精进,你对语言特性、设计模式、重构手法等等基本功,还有你对业务的理解,都通过一个个的用例、一次次重构体现出来。 TDD是一种对做事方法的极致拆分,一次只做一件事,思考业务逻辑时就不考虑实现和代码坏味道;编写业务代码时,也仅考虑能通过用例的逻辑;而重构时,也是不能改变原来的代码逻辑的。通过一个个极小粒度的操作,实现最终整体的协调,有种艺术的美感。

    作者回复: good

    2022-03-21
    17
  • Gojustforfun
    Go演示git提交记录: https://github.com/longyue0521/TDD-In-Go/commits/args Commits on Mar 28, 2022 ~ Commits on Mar 26, 2022之间的内容与本篇文章对应. 采用baby step每步都有提交记录可以对比学习. 如果觉得本项目对你有帮助,欢迎留言、star

    作者回复: good

    2022-03-29
    1
  • Geek_7c4953
    这节课的视频看过来,感觉代码变得难以阅读了。 我觉得原因有两点: 1.因为对坏味道的延迟处理,让坏味道影响了代码的可读性。 2.因为对逻辑的构建是点式的而非线性的,导致思维在几个点之间跳跃而非循序渐进的,造成思维处在“先回忆再思考”的循环中。 不过也有可能是因为不是第一人称写代码,所以思维并不是完全跟上,不知道老师对这个问题怎么看。

    作者回复: 对象风格是以被修改的状态为线索组织代码,过程风格是以流程为线索。思考的方式不一样

    2022-04-12
  • webmin
    三课观看下来有一种和老师结对的感觉,忽然明白了结对编程的相互学习过程比结果更最要,以往看到的代码包括开源项目的都已经是阶段性的结果,这个阶段结果的产生其实中间还一些子过程你是看不到的,就算你有设计文档和实现代码但是中间过程是缺失的,且这些中间过程也是无法从设计文档和结果代码反推出来的。中间的这些渐进过程才是内功心法。
    2022-03-23
    8
  • 含低调
    真是跪着看完的
    2022-12-27归属地:浙江
    2
    3
  • aoe
    03 课 学习笔记 http://wyyl1.com/post/19/03/ 源码 https://github.com/wyyl1/geektime-tdd/tree/branch-03 摘要: 1. 测试代码需要重构 2. 提前将 Option 对象提取出 flag 的代码在 bad path 翻车了 3. 视频中代码的两个坏味道,期中之一:if 没有 “{}”。苹果公司的“GoTo Fail 漏洞”,就是因为没有括号引起的。 内容摘自:范学雷老师的专栏 极客时间 | 代码精进之路 | 02 | 把错误关在笼子里的五道关卡
    2022-03-23
    2
    2
  • Geek_7c0961
    这课最大的痛点之一是用了太多的java 专用技法,对c++用户特别不友好
    2023-02-01归属地:美国
    1
  • 老衲
    这一节跟上一节的内容是不是少了对TooManyArgumentsException 的封装描述?
    2022-07-21
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部