技术开发 频道

软件工程师必知的12个单元测试技巧

5、为每一个测试创造干净的环境

    软件工程师们总是很在乎效率,视效率如生命。因此如果你告诉他们,每一个测试需要单独创建的话,他们会认为比较浪费时间。

    然而这一点是非常重要的,如果一个测试因为使用了一些其它测试的老数据而失败,显然这是你最不想发生的事情。因此请确保每一个测试被正确的创建,而不要担心所谓的效率。

    如果你所有的测试具有一个共同的环境,它并不随着测试的运行而改变,那么你可以在你的测试基类中增加一个静态的创建区。

6、使用模拟对象(Mock Objects)进行有效测试

    建立测试并不总是一件简单的事情,在有些时候你的第一感觉往往是没有办法进行测试。

    举个例子来说,如果在你的程序中使用了Amazon Web服务,如何在不影响真实系统的前提下在测试中模仿它呢?

    其实有很多方法可用。你可以创建一些虚假的数据,然后在测试中使用它们。在有用户的系统中,可以创建一系列专门用于测试的账号。

    对一个生产系统进行测试是一件非常危险的做法:如果发生点什么错误,你可能会误删真正的用户数据。一个可行的办法就是使用假数据,又叫做模拟对象(stubs or mock objects)。

    模拟对象实现了特定的接口,但是返回预先定义好的结果。举个例子来说,你可以为Amazon S3创建一个模拟对象,它只从你的本地硬盘中读取预先设置好的数据,而不去使用真实服务数据。

    在对具有很多构件的复杂系统进行测试的时候,模拟对象是非常有用的。在JavaScript中有几个框架可以非常方便的创建模拟对象,其中最出名的是JMock。

7、代码重构时也对测试代码进行重构

    你只有对测试工作真正投入,它才会发挥更大的作用。你不仅仅要编写测试,你还需要确保它们及时更新。当为一个组件增加一个新方法时,你需要同时增加一个或更多的相应测试。同样,如果你要删除无用代码的话,也要删除已经不再有用的测试。

    在进行大量重构工作的时候单元测试尤其有用。利用重构可以大大提高我们的编程效率,不过对代码完成了重构后,别忘了也对测试进行相应的修改,并要重新运行一下所有相关测试,以确保在进行程序改动的时候没有出现错误。

8、针对发现的程序漏洞编写测试

    在减少漏洞方面,单元测试是一个非常有用的武器。当你发现了代码中的问题后,在对其进行修复以前,先编写一个测试来让这个问题可以在测试的时候暴露出来。这样,如果这个问题在其它地方重新出现的话,你就可以在测试的时候轻松发现它们。

    这是一个非常有用的经验,因为你不可能总是马上就编写出能发现所有问题的测试代码。当你增加了针对某种漏洞的测试后,实际上你的测试代码距离完美又靠近了一步。

0
相关文章