扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Jack D. Herrington 来源:51CTO.com 2007年9月1日
关键字:
编写哪些测试以及如何编写这些测试
在编写测试时,我喜欢覆盖以下情况:
◆所有正面测试
这组测试可以确保所有的东西都如我们期望的一样工作。
◆所有负面测试
逐一使用这些测试,从而确保每个失效或异常情况都被测试到了。
◆正面序列测试
这组测试可以确保按照正确顺序的调用可以像我们期望的一样工作。
◆负面序列测试
这组测试可以确保当不按正确顺序进行调用时就会失败。
◆负载测试
在适当情况下,可以执行一小组测试来确定这些测试的性能在我们期望的范围之内。例如,2,000次调用应该在2秒之内完成。
◆资源测试
这些测试确保应用编程接口(API)可以正确地分配并释放资源——例如,连续几次调用打开、写入以及关闭基于文件的API,从而确保没有文件依然是被打开的。
◆回调测试
对于具有回调方法的API来说,这些测试可以确保如果没有定义回调函数,代码可以正常运行。另外,这些测试还可以确保在定义了回调函数但是这些回调函数操作有误或产生异常时,代码依然可以正常运行。
这是有关单元测试的几点想法。有关如何编写单元测试,我也有几点建议:
◆不要使用随机数据
尽管在一个界面中产生随机数据看起来貌似一个好主意,但是我们要避免这样做,因为这些数据会变得非常难以调试。如果数据是在每次调用时随机生成的,那么就可能产生一次测试时出现了错误而另外一次测试却没有出现错误的情况。如果测试需要随机数据,可以在一个文件中生成这些数据,然后每次运行时都使用这个文件。采用这种方法,我们就获得了一些“噪音”数据,但是仍然可以对错误进行调试。
◆分组测试
我们很容易累积起数千个测试,需要几个小时才能执行完。这没什么问题,但是对这些测试进行分组使我们可以快速运行某组测试并对主要关注的问题进行检查,然后晚上运行完整的测试。
◆编写稳健的API和稳健的测试
编写API和测试时要注意它们不能在增加新功能或修改现有功能时很容易就会崩溃,这一点非常重要。这里没有通用的绝招,但是有一条准则是那些“振荡的”测试(一会儿失败,一会儿成功,反复不停的测试)应该很快地丢弃。
结束语
单元测试对于工程师来说意义重大。它们是敏捷开发过程(这个过程非常强调编码的作用,因为文档需要一些证据证明代码是按照规范进行工作的)的一个基础。单元测试就提供了这种证据。这个过程从单元测试开始入手,这定义了代码应该实现但目前尚未实现的功能。因此,所有的测试最初都会失败。然后当代码接近完成时,测试就通过了。当所有测试全部通过时,代码也就变得非常完善了。
我从来没有在不使用单元测试的情况下编写大型代码或修改大型或复杂的代码块。我通常都是在修改代码之前就为现有代码编写了单元测试,这样可以确保自己清楚在修改代码时破坏了什么(或者没有破坏什么)。这为我对自己提供给客户的代码提供了很大的信心,相信它们正在正确运行——即便是在凌晨3点。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者