很早就听闻过测试驱动开发,在加入ThoughtWorks之前,在参加ThoughtWorks University之前。但是一直都不得其法,没有登堂入室。这次从印度参加了“有史以来最好的一届”的TWU,顿悟了测试驱动开发(以下简称TDD),算是最大的收获。
其
实TDD很简单,只要你不把它当测试。没错,就这么简单。把TDD当测试来写,你想着的就是如何找出已有代码的错误。想象着的是一副从迷宫中拯救出受困公
主的图景。这个时候你就会受困于该如何去测与测什么的问题。假若你不把TDD当测试来写,顿时就会豁然开朗,拨云见日。
我认为TDD的本质在于,
通过写测试来写代码。也就是在每一行产品代码落笔之前,先写一个测试来给这行代码找一个存在的理由。在参加TWU期间,一位名叫Garret
Smith的培训师(Coach)反复和我们强调任何一行代码都要有测试。而且给我们举了一个实际例子:公司的英国办公室的一位同事编写一个软件专门用来
对付无测试的代码。方式就是一行行地删除产品代码,如果测试仍然能够通过,这行代码就被删除了。这个例子给我的印象很深刻,因为我觉得它一语道破了天机。
TDD其实就这么简单,让你的产品代码不能随便被别人“删除”。
当用这个视角去实践TDD的时候。测试的名字就会很细节化。具体到描述什么条件时
以什么参数调用什么方法时会有什么返回值。回头一想,这些测试对应着是什么呢?其实就是javadoc文档!那么TDD又是什么一个过程呢?就是先写文档
再写代码的过程。这么一说来,TDD就很自然了。你先想到一个很简单的功能要实现,有很多的代码要写。从一堆要写的代码中选择出最简单的部分(比如边界的
情况)来写。把这部分代码的外部行为想好,写出对应的测试来,并给测试取一个能够当文档使的名字。
知道了TDD的本质与单元测试的本质之后,再来
看一下我认为唯一关键的一个实践,那就是Mock。没有Mock的单元测试就很可能不是单元测试,也许是集成测试,也许是功能测试,总之不是TDD中所需
要的那种能够驱动你开发的测试。任何牵涉到两个有行为的类之间交互的测试,都要Mock一个测另外一个,不然就会对象之间的互相影响就会使得测试测不准,
无法确知问题所在,也无法让你的测试能够清晰地表达意图。
也许以前有一些书籍或者人讲过TDD只适合测算法,单元测试要做到黑盒,写Mock要适
度之类的话。我目前的认识是这些见解容易让人把单元测试真当测试来看了。其实矫枉过正也无妨,就把TDD测试不当测试吧。总结一下就是TDD是确保你的代
码不被别人意外“删掉”的开发方式,单元测试是你产品代码的文档,Mock是编写单元测试时最重要的技术,用于隔离测试对象行为。
分享到:
相关推荐
瞬间·顿悟作文.doc
该文档讲述了作者学习编程以来的所有心得体会,编程世界里数据和代码的关系
基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享,旨于对Linux内核模块机制的熟悉、常见接口的Linux驱动实现、常用模块的原理掌握。原则上,每个驱动模块我都会编写对应的教程(因为我相信掌握知识最有效的...
应急管理(提示顿悟).pdf
采用自发式顿悟范式,比较被试在实验室条件下解决何种类型的中文远距离联想任务(CRAT)时存在更明显的顿悟,结果发现:① 目标字为多音字的CRAT解决率、反应时、顿悟率与目标字为单音字条件时的差异无统计学意义....
新冠病毒疫情与企业的未来:高管的顿悟揭示出后疫情时代的机遇精品报告2020.pdf
以40个科学发明创造领域的顿悟问题为实验材料,采用“学习多个原型―测试多个问题”的两阶段实验范式,通过操纵原型学习个数(5/10)、标志有无(原型材料中是否标志出特征性功能的词语)和功能语义相似度(原型的特征性...
SQLServer2000万能JDBC驱动
顿悟设计验证基础架构 ##目录结构 目录 内容 docs 安装指南和运行方向 伊根 指令(程序)生成器 en 内存映射事务生成 比较基因 将测试输出与预期结果进行比较 主显节 构建被测设备 剧本 各种DV构建和运行脚本 ##...
一次迟到了十年的顿悟,这就是我最早体验到的工程技术玄机之一。
SQLserver2005最新JDBC驱动
逻辑思维及形象思维的区别及联系.doc
leetcode算法题主函数如何写 《python 入阵曲:初级》 1、课程概述 课程框架简介 课程特色与亮点 编程思维与传统理科思维的区别 程序员的生存现状 自己眼中的计算机领域的发展前景 自我介绍 ...
□ 软件开发是一项实践工作,最直接的方法就是编程。没有从来不下棋却熟悉定式的围棋高手。掌握设计模式是水到渠成的事情,不要强求。随着理论和实践的不断积累,可能会“渐悟”或者“顿悟”。 □ 设计模式解决的是...
概述该存储库包含下载,准备,构建,测试,打包和发布开源软件所必需的文件。 它不包括各个开源软件包的源代码。 此源代码由其各自的开发人员/社区维护,并在构建过程中从其站点下载。入门为了在存储库中进行构建或...
这本书要结合以太坊源码和yellowpaper阅读,可以有顿悟的感觉。甚至是比yellowpaper有更好的理解,当然最新的结构还是在git上不断演进的,需要讨论: 一个人分析理解是必要的,尤其纸上得来终觉浅,绝知此事要躬行...
提升搜索,你会发现,它需要刻意练习与长期积累,唯有如此,才能实现顿悟与升华。这门搜索课程将带你进入科学搜索的大门,让你拥有事半功倍的高效人生。 感想:我自己看完了课程,觉得很有用。对自己的搜索模式和思维方式...
设计模式之于面向对象系统的设计和开发的作用就有如数据结构之于面向过程开发的作用一般,其重要性和必要性自然不需要我赘述。然而学习设计模式的过程却是痛苦的,从 阅读设计模式的圣经一一GoF的《设计模式:可复用...
java web开发技术的一本好书,头一次看到这么全的编、解码分析,读完有种顿悟的感觉