`

你能测试你的代码吗

阅读更多

 

在敏捷开发的理念被越来越多的人接受,实践,另一个名字也逐渐被人们熟悉:TDD TDDTest Drive Development,测试驱动开发。在实践你的代码前,你应该先实现针对代码的测试代码。

测试驱动的好出显而易见: 用了丰富而全面的测试代码,可以保证你的代码的质量。在修复了一个bug后,你如何保证你的改动没有破坏以前的实现?没有引入新的bug?你制作的第三方库发布了一个新版本,你如何保证某些方法的行为和这个方法的前一个版本是一致的?答案就是完整的丰富的持久的测试。

我们不谈系统测试,集成测试,压力测试,我们谈单元测试。大的程序由小的代码片段构成,正如每一所房子都由一块块的砖构建。但是,你能保证你提交的那一小段代码片段的行为么?它的行为可预测么,或者说,给定一个输入,你能确定它的真实输出吗?

这时候,你该问问你自己:我能测试这段代码吗?

这是一个简单的问题,这也是一个有趣的问题。当我第一次由衷的,不是为了应付所谓的TDD实践,问自己时,我着实被自己吓到了。

因为我的代码里,有很多方法是无法被测试的。因为,有很多方法要从外部资源获得数据,也许是读取配置文件,也许是打开一个数据库连接,或者从socket中读取字节流;因为,有很多方法都没有输出,仅仅是为了对传入的参数做些改变,或者只是为了打印些数据。你应该注意了,当你觉得对一个方法的测试无法入手的时候,你应该考虑,我是否应该重写这段代码,让它更容易被测试呢?

这时候,你该问问自己:这段代码是不是承担了太多任务呢?

你只是想从配置文件里读取文本,然后解析每一行的文件进行配置,那你就该让一个方法负责读取文件,产生一个文本流,而另一个方法只负责解析一行字符串,解析后返回结果。现在,写你的测试用例吧!你完全可以保证你的方法对每一行输入是否产生了你期望的输出!至于文件读取,如果文件格式正确的,那么你的解析方法99%会按照你期望的行为工作,你对代码的正确性的信心是不是增加了呢?

如果你只是想依赖某些void函数对参数做些操作,我希望你能接受下函数式编程的观点:方法就是input->output,这会让你更容易写出测试用例和健壮的代码。如果这个方法仅仅是打印些内容,那么,你就该将print作为内容的消费者,而产生print的方法是生产者。针对生产者的测试会更容易开展。

当你写完代码时,问问自己:“我能测试这段代码吗”,你就在追求代码之美的路上,又前进了一步。

分享到:
评论

相关推荐

    压力测试代码压力测试代码

    压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试...

    XSS测试代码大全————

    XSS测试代码 安全测试 XSS测试代码大全

    tensorflow-gpu测试代码

    tensorflow-gpu测试代码,测试成功会输出GPU True

    白盒测试源代码

    在白盒测试中,测试人员通常需要理解代码的实现细节,包括函数、流程控制、变量状态等,以此来确保软件的每个部分都能按照预期正常工作。以下是对白盒测试源代码的详细解释: 1. **代码覆盖率**:在白盒测试中,一...

    django环境测试前端代码

    django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码django环境测试前端代码...

    tensorflow-gpu测试代码.py

    tensorflow-gpu测试代码

    串口测试代码串口测试代码

    串口测试代码串口测试代码串口测试代码串口测试代码

    测试源代码

    总的来说,这个"测试源代码"压缩包是一个宝贵的教育资源,它能帮助初学者深入理解测试的重要性,学习如何编写有效的测试代码,以及如何通过测试驱动开发(TDD)来提高代码质量。通过研究这些示例,初学者将能够更好...

    Junit参数化测试源代码

    在Java世界中,单元测试是软件开发不可或缺的一部分,它确保代码的质量和可维护性。JUnit作为最常用的Java单元测试框架,极大地简化...通过阅读和分析"mybatisDemo"中的代码,你应该能更好地掌握参数化测试的实际运用。

    android 串口测试demo 代码简单 无bug 完美运行

    android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo 代码简单 无bug 完美运行 android 串口测试demo...

    Java单元测试之代码覆盖率-JaCoCo

    在Java开发过程中,单元测试是确保代码质量的重要环节。它帮助开发者发现并修复问题,提高软件的稳定性和可维护性。而代码覆盖率则是衡量单元测试有效性的一个关键指标,它表示了被测试代码被执行的程度。JaCoCo是一...

    系统测试中代码走查测试方法

    代码走查测试方法在系统测试中的应用 代码走查是一种白盒测试方法,主要用于检测代码的质量和可靠性。在系统测试中,代码走查测试方法可以帮助开发人员和测试人员发现代码中的缺陷和问题,提高代码的质量和可靠性。...

    socket 代码测试

    socket 代码测试 自己写的一个小的socekt测试文件 包括读取文件能容

    测试 webpart 源代码 测试 webpart 源代码

    测试 webpart 源代码测试 webpart 源代码测试 webpart 源代码测试 webpart 源代码

    PL/0语言编译器源代码及测试代码

    通过阅读和理解这些代码,你可以看到如何使用C/C++来实现这些编译过程,并学习如何构建自己的编译器。此外,测试代码用于验证编译器的正确性,它包含各种PL/0语言的样本程序,这些程序被用来测试编译器的不同功能和...

    在线测试HTML代码的网页

    在线测试HTML代码的网页是一种非常实用的工具,尤其对于初学者和开发者来说,它提供了便捷的方式来进行实时的HTML代码编写和预览。这样的网页通常包括一个编辑器区域,用户可以在其中输入HTML代码,然后通过即时渲染...

    单元测试的代码覆盖率至少80%

    单元测试的代码覆盖率至少80%!一大早,一个年轻的程序员问大师:“我准备写一些单元测试用例。代码覆盖率应该达到多少为好?”大师回答道:“不要考虑代码覆盖率,只要写出一些好的测试用例即可。”  一大早,一个...

    人格测试的python代码实现通过代码测试你的人格魅力

    人格测试的python程序,just for fun,有兴趣的可以下下来玩一下

    java 测试代码

    Mock对象能模仿真实对象的行为,帮助我们在测试中控制和验证被测试代码的行为。依赖注入(Dependency Injection,DI)是一种设计模式,它允许我们解耦组件间的依赖关系,使得测试更简单。Spring框架就提供了强大的...

    Linux USB HID Device 测试代码

    "亲测可用"的描述提示我们,这个测试代码需要与特定的HID驱动配套使用,这意味着代码可能包含了特定设备的配置或接口调用。因此,在使用这份测试代码之前,你需要确认你的硬件设备的HID驱动是否已经正确安装并编译进...

Global site tag (gtag.js) - Google Analytics