TDD 之旅

作者: 小木桶_3374 | 来源:发表于2017-07-31 10:28 被阅读23次

最近两年由于敏捷社区的活跃TDD也受到了更多程序员关注。业内对TDD 争论一直没有停止有推崇的也有诋毁的,这个世界上没有那么绝对的事情 TDD存在必然有它适用的场景,在需要用到TDD的场合 我们把它用好就可以了。让我们一起来一段TDD之旅。

一、认识TDD

TDD(全称Test Driven Development)测试驱动开发,是一种软件开发的流程,其由敏捷的“极限编程”引入。其开发过程是从功能需求的测试用例开始,先添加一个测试用例,然后运行所有的测试用例看看有没有问题,再实现测试用例所要测试的功能,然后再运行测试用例,查看是否有case失败,然后重构代码,再重复以上步骤。

TDD的两个核心点:1、用测试用例覆盖所有的需求;2、在代码变动的时候不断重构

在敏捷中主张通过回顾会进行团队改进,其实TDD也是基于这个理念来进行开发设计。比如当你要完成一个CASE时,首先你要写一个测试用例,再去写具体的实现,最后偿试跑一下测试是否通过,接下来我们需要思考当前的代码结构是否还有更好的方式来实现。通过持续这个过程来保证当前的结构是最优的。我个人更愿景把TDD看成一种思考方式。

PS:网上有太多关于介绍TDD的文章了 我这里就不在多啰嗦了,下面我们用TDD的方式写一段代码让大家感受一下。

二、TDD 操练

题目:将一个数字字符串转换成一个整数。

在开始之前我先给大家介绍一个写测试用例的格式G(GIVE)W(WHEN)T(THEN)

Give:测试用例的测试说明。

When:具体测试条件。

Then:期望的测试结果。

接下来我们看看用TDD的方式怎么来实现这个题目。

1、首先们列出 需求的测试用例

当字符串为空时 返回数字 0

当字符串为“1576” 返回数字 1576

当字符串为“-875” 返回数字 -875

当字符串为“3147483647”  返回数字2147483647

当字符串为“-214748364899” 返回数字 -2147483648

当字符串中包含非数字字符时返回数字 0

好了 测试用例写完了,让我们依次来完成每一个case .let’s go

当字符串为空时 返回数字 0

测试用例

代码:(注 不要想太多,我们只为了完成第一个测试用例而写的代码)

运行结果(bingo  测试通过了 我们继续)

当字符串为“1576” 返回数字 1576

测试用例

代码:(嘿嘿  看到这个代码 有同学要开始 喷了 ,请不要着急 我们继续 往后看)

运行结果(bingo  测试又通过了 哈哈 你好像并不开心呢)我们继续

当字符串为“-875” 返回数字 -875

测试用例

代码:(看到这里如果 你还能坚持 我真的很感动  ,我们发现这里出现了太多的重复的代码,接下来我们应该怎么办 ? 对重构  TDD 最重的一个环节之一 让我们来重构这段代码 )

重构后的代码  这样是不是 看着顺眼一些了,我们看看能不能通过测试用例

出错了,这是为什么呢  我们瞧一下是  原来是 “-875” 没有转换失败 ,不怕我们继续修改代码。

我们加上了 一个对负数的处理 修改完成 让我们再 测试一下

bingo 三个测试用例都通过了  ,也许你会说 代码还有可以优化的空间 是的没错 但还是先把其它的测试用例先搞定再说

当字符串为“3147483647”  返回数字2147483647

测试用例:

我们先不改变人码 看看是否可以通过(我们跑一下单元测试)

oh my god 出错了 这是为什么呢  为什么和我们想的不一样的 ,我们来看看2147483647 是什么意思  ,原来是 Integer的最大值啊 ,下面我们来处理一下代码。

我们运行一下单元测试 (全部通过了 ,剩下的几个case 大家自己动手试一下了,实践是最重的  动手试试吧 )

三、总结

TDD 旅程 到此结束了,希望旅途中小伙伴对TDD有一个新的认识。TDD是一个不断迭代的过程,让你的程序结构清晰、合理。再重构的过程中 有大量的测试用例给你的代码进行保驾护航,你可以大胆的去修改 代码,尤其是 修改其它同学留下的代码 测试用例会显得更加重要。

注:TDD的两个核心点:1、用测试用例覆盖所有的需求;2、在代码变动的时候不断重构

相关文章

  • TDD之旅

    关于TDD我都经历过什么: 最开始对TDD的理解很表面,只知道TDD就是先写测试,再写实现,由于大家(当然包括我自...

  • TDD 之旅

    最近两年由于敏捷社区的活跃TDD也受到了更多程序员关注。业内对TDD 争论一直没有停止有推崇的也有诋毁的,这个世界...

  • 轻松TDD之旅

    TDD简介 TDD是什么 TDD一般是Test Driven Development(测试驱动开发)的缩写,它以测...

  • 深度解读 - TDD(测试驱动开发)

    本文结构: 什么是 TDD 为什么要 TDD 怎么 TDD FAQ 学习路径 延伸阅读 什么是 TDD TDD 有...

  • TDD和BDD

    TDD(Test-Driven Development)——测试驱动开发 1.为什么使用TDD: 1)TDD根据客...

  • 初识TDD

    什么是TDD 本文所说的 TDD 指狭义上的 TDD,也就是「单元测试驱动开发」。 TDD 是敏捷开发中的一项核心...

  • 为什么TDD很难在项目上推动?

    经常在TDD训练营中有学员提这个问题:学了TDD,在项目上也没法落地,为什么TDD很难在项目上推动? TDD本身就...

  • 认识 TDD

    什么是TDD? TDD 有广义和狭义之分,常说的是狭义的 TDD,也就是 UTDD(Unit Test Drive...

  • 测试驱动开发(TDD)总结——原理篇

    标签 | TDD Java 测试驱动开发(TDD)总结——原理篇

  • Robolectric

    开始单元测试之前还是要先了解TDD 中文版:TDD 已死?让我们再聊聊 TDD 英文版:Introduction ...

网友评论

    本文标题:TDD 之旅

    本文链接:https://www.haomeiwen.com/subject/unmllxtx.html