在敏捷开发的理念被越来越多的人接受,实践,另一个名字也逐渐被人们熟悉:TDD。 TDD,Test Drive Development,测试驱动开发。在实践你的代码前,你应该先实现针对代码的测试代码。
测试驱动的好出显而易见: 用了丰富而全面的测试代码,可以保证你的代码的质量。在修复了一个bug后,你如何保证你的改动没有破坏以前的实现?没有引入新的bug?你制作的第三方库发布了一个新版本,你如何保证某些方法的行为和这个方法的前一个版本是一致的?答案就是完整的丰富的持久的测试。
我们不谈系统测试,集成测试,压力测试,我们谈单元测试。大的程序由小的代码片段构成,正如每一所房子都由一块块的砖构建。但是,你能保证你提交的那一小段代码片段的行为么?它的行为可预测么,或者说,给定一个输入,你能确定它的真实输出吗?
这时候,你该问问你自己:我能测试这段代码吗?
这是一个简单的问题,这也是一个有趣的问题。当我第一次由衷的,不是为了应付所谓的TDD实践,问自己时,我着实被自己吓到了。
因为我的代码里,有很多方法是无法被测试的。因为,有很多方法要从外部资源获得数据,也许是读取配置文件,也许是打开一个数据库连接,或者从socket中读取字节流;因为,有很多方法都没有输出,仅仅是为了对传入的参数做些改变,或者只是为了打印些数据。你应该注意了,当你觉得对一个方法的测试无法入手的时候,你应该考虑,我是否应该重写这段代码,让它更容易被测试呢?
这时候,你该问问自己:这段代码是不是承担了太多任务呢?
你只是想从配置文件里读取文本,然后解析每一行的文件进行配置,那你就该让一个方法负责读取文件,产生一个文本流,而另一个方法只负责解析一行字符串,解析后返回结果。现在,写你的测试用例吧!你完全可以保证你的方法对每一行输入是否产生了你期望的输出!至于文件读取,如果文件格式正确的,那么你的解析方法99%会按照你期望的行为工作,你对代码的正确性的信心是不是增加了呢?
如果你只是想依赖某些void函数对参数做些操作,我希望你能接受下函数式编程的观点:方法就是input->output,这会让你更容易写出测试用例和健壮的代码。如果这个方法仅仅是打印些内容,那么,你就该将print作为内容的消费者,而产生print的方法是生产者。针对生产者的测试会更容易开展。
当你写完代码时,问问自己:“我能测试这段代码吗”,你就在追求代码之美的路上,又前进了一步。
分享到:
相关推荐
测试类是对被测代码功能的模拟调用,通过断言来验证预期结果是否与实际结果相符。而辅助类可能包括数据生成、环境配置或测试用例的共通部分。 在自动化测试中,数据驱动测试是一种常见的策略,它将测试数据和测试...
XSS测试代码 安全测试 XSS测试代码大全
在白盒测试中,测试人员通常需要理解代码的实现细节,包括函数、流程控制、变量状态等,以此来确保软件的每个部分都能按照预期正常工作。以下是对白盒测试源代码的详细解释: 1. **代码覆盖率**:在白盒测试中,一...
django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码...
tensorflow-gpu测试代码
单元测试关注的是程序中的最小可测试单元,如函数或方法,确保它们独立运行时能正确完成任务。集成测试则在所有模块组合后进行,检查模块间的接口是否正确交互。系统测试则是对整个系统的全面检查,确保其满足所有的...
JUnit是Java编程语言中最常用的单元测试框架...你可以下载并导入到你的IDE中,看看它是如何使用JUnit来测试代码的。通过这种方式学习,你可以更好地理解单元测试的概念,以及如何在实际项目中应用它们来提高代码质量。
作用域测试代码
这样的定制不仅能让测试更加符合用户的具体情况,还能提高测试的接受度和参与者的参与兴趣。 而对于教育研究人员而言,他们可以利用源代码进行实验和研究,分析测试结果与个体差异之间的相关性,进而探索智力发展的...
struts2学习测试代码,struts2学习测试代码2struts2学习测试代码,struts2学习测试代码
在IT行业中,编写和测试代码是开发者日常工作中不可或缺的部分。"测试的一些demo代码"这个标题表明,这是一些用于测试目的的示例代码,可能是为了验证某个功能、修复bug或者理解新概念。这类代码通常简洁明了,易于...
android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...
cmake测试相关代码
在Java开发过程中,单元测试是确保代码质量的重要环节。它帮助开发者发现并修复问题,提高软件的稳定性和可维护性。而代码覆盖率则是衡量单元测试有效性的一个关键指标,它表示了被测试代码被执行的程度。JaCoCo是一...
"亲测可用"的描述提示我们,这个测试代码需要与特定的HID驱动配套使用,这意味着代码可能包含了特定设备的配置或接口调用。因此,在使用这份测试代码之前,你需要确认你的硬件设备的HID驱动是否已经正确安装并编译进...
struts2学习测struts2学习测试代码试代码
通过阅读和运行这些测试代码,你可以快速掌握VTK的基本用法,比如数据处理、过滤、渲染和交互操作。 除了完整的源代码,VTK 5.8还附带了数十个示例代码。这些例子涵盖了从基础的几何对象绘制到复杂的图像处理和数据...
在IT行业中,代码和测试是两个至关重要的环节,它们构成了软件开发的核心流程。"aaa.rar"这个文件名可能表示这是一个压缩包,其中包含了与"代码_测试_测试代码"相关的项目资源。通常,这样的文件会包含源代码、测试...
测试 webpart 源代码测试 webpart 源代码测试 webpart 源代码测试 webpart 源代码
通过阅读和理解这些代码,你可以看到如何使用C/C++来实现这些编译过程,并学习如何构建自己的编译器。此外,测试代码用于验证编译器的正确性,它包含各种PL/0语言的样本程序,这些程序被用来测试编译器的不同功能和...