【译】如何写一手漂亮的测试代码

2021-04-14   出处:https://www.cnblogs.com/tynam  作/译者:杨定佳  

        

        在编写 Junit 测试时,我采用了同一套格式。如此,对于测试用例我就可以遵循这套格式进行编写和阅读,使所有的测试都整体划一。这种格式模板可以帮助我更快的编写测试,提高工作效率。今天我就与大家分享我的这套格式模板。
        (译者评:与我在测试建设原则中提出的继承原则相同,都是在进行一项测试工作之前,将公共的进行提取,统一格式模板,然后在以后的测试活动中都继承这套模板开展。)

文件格式

        首先,在项目的测试包下新建一个测试文件/测试类,并且创建测试方法。在编写测试文件/测试类时,所有的测试文件/测试类都以 Test 结束,这样会容易理解其是一个测试文件/测试类,也方便后期维护时查看,编辑。例如一个名字为 SomeService 的类就会有一个名为 SomeServiceTest 对应的测试类。
        (译者评:这是一个很好的习惯,在项目测试中可以考虑作为一种规定。就是开发在程序中写了一个 SomeService 类,那么在测试 SomeService 类时文件名就需要是 SomeServiceTest ,以 类名 + Test 的形式进行命名测试类。)

        然后,给测试取一个容易识别,区分,好听的名字,笔者个人比较喜欢省略单词 test,因为就是在测试类中进行的,继续在名字中添加 test 看起来就有点累赘。对于测试名字需要从名字中读取出所测的内容,这样我们就可以更好的对每一个测试进行区分。


        (译者评:对于测试名,取一个易于理解的还是比较支持的,见名知意。但对于省略单词 test,译者理解的是一般情况下可以省略,但是某些必要的场景还是希望添加。)

大纲

        接下来,笔者会在测试方法中写入一些模板,这种模板是我在写所有测试中都会使用的模板。首先在测试方法中设置了一个预置条件 setup,然后对方法进行测试 test,最后进行断言 assert/validate,通过断言来确保与期望结果一致。


    上面代码中部分内容的含义:


  • setup: 测试预制条件写的地方。
  • test: 对方法进行测试地方。
  • assert/validate: 此处写断言。


        (译者评:作者在此写的并不是很全。有准备条件,但是没有销毁条件。我们都知道,在进行自动化测试时非常重要的一个步骤就是数据复原。如果测试后数据没有复原,将会影响一次的执行。所以在上面三个过程后,还应该存在一个销毁条件 teardown,虽然可能 teardown 不是一个必须项。所以一共应该有四个步骤,setup、test、assert/validate、teardown。)
        (译者评:上面写的范围有点小。不仅在测试类中需要有这样的设置,在测试类层面、测试文件层面也需要 setup、test、assert/validate、teardown 四个步骤。)

预制条件

        最后,我简单的填充了一下空白。如果预置条件和所有其他测试的预制条件相似,笔者会将此逻辑抽象为 @Before 函数。每个测试之前都会执行此函数。如果多个测试,但不是所有测试,之间需要设置一个预制条件,那么就将其设置为一个私有函数进行封装。对于一般的测试,使用这两种方法设置预制条件都可以提高代码的复用性。如果需要改变测试的预制条件,那么只需要对一个地方进行改变便可以达到目的。在进行测试重构时这将是非常实用的。


测试命名

        在进行预期结果和实际结果命名时,使用 expected 和 actual 是非常有效的。 使用这两个关键字写断言也非常易于阅读。actual 是实际结果,expected 是预期结果,使用这两个结果进行对比。


  • expected :这是预期结果,即是希望的结果是什么。预期结果可能有多条,在写的时候请按照一定的顺序进行。
  • actual :测试执行后,实际输出的结果。


        命名是对一个事物进行设计或选择的名字,特别是在科学或其他学科中。在软件开发和测试中,涉及到API、响应结果、变量、函数、文档名称。
        (译者评:四个字,见名知意。)

结论

        使用这个格式模板进行测试,可以提高测试效率,使代码更易维护。

        (译者评:全文所说的文件格式、测试顺序、断言命名、预期结果排序还是值的学习的,特别对于没有经历过痛苦的维护代码的人员来说非常又必要。就是内容太少,总结的太少。)

原文:https://dev.to/ninan_phillip/how-to-write-great-tests-4719


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
142°|1428 人阅读|0 条评论

登录 后发表评论