• 3
  • 3
分享

  想必金字塔测试原理大家已经很熟悉了,近年来的测试驱动开放在各个公司开始盛行,测试代码先写的倡议被反复提及。

  鉴于此,许多中大型软件公司对单元测试的要求也逐渐提高。那么,编写单元测试有哪些小技巧可以借鉴和学习的呢?

  测试代码文件路径与开发代码文件路径“相同”

  这里的“相同”并不是完全意义的一摸一样,测试代码和开发代码处于同一目录,而是指的测试代码文件路径你与开发代码文件路径“大体相同”。

  如下图1、2所示,开发代码路径和测试代码路径都包括/java/ru/yandex/clickhouse/。

1-1.png

图1 开发代码路径


1-2.png

图2 测试代码路径


  测试代码文件名清晰

  清晰的测试代码文件名可以帮助阅读测试代码的其他人员对该文件的测试内容有很好的初步认识。

  例如上图2所示:测试代码文件ClickHouseConnectionTest.java,从命名上就可以帮助阅读人员获悉该测试代码文件是针对ClickHouseConnection.java的测试。


  清楚地命名单元测试名称

  不要担心名字过长,一个长而完整的名称可以让您立即知道哪个测试失败了,以及该测试到底想做什么。

  长时间命名的测试也可以记录你的测试。如下图3所示:从testMaxMemoryUsage()名称就可以看出该测试代码是针对最大内存使用量地测试。显而易见,该名称远远好于test1()、test()2……

1-3.png

图3 单元测试名称样例


  一次测试一项

  同集成测试、系统测试原则一致,测试用例应该保持“专有性”原则,即每次测试只针对一个功能进行测试。

  如下图4所示:都是针对clickhouse进行配置,然后发起查询的功能,但图上方主要是针对最大执行事件设置的测试,图下方是针对最大内存使用量设置的测试。

1-4.png

图4 单元测试“专有性”样例


  测试保持独立性

  测试保持独立性指的是不同测试用例/代码块之间不应该存在依赖(如:test2()的代码依赖test1()中的参数设置),每一个测试用例/代码块应该能独立运行。

  鉴于此,我们可以把一些通用性配置(如数据库初始化)提取到测试套件/代码文件初始化环节。


  清晰地抛出测试失败地异常

  测试用例/代码并不能保证每次运行都能成功(如开发代码进行重构或功能变动引起地测试代码失败),因此在编写测试代码时需要捕获失败时的异常,并清晰地返回。

  例如:若使用Integer aa=1;Integer bb=2;Assert.assertTrue(aa==bb);代码判断变量aa和bb是否相等,若不相等时只会判定失败而不会有详细错误信息。

  若改为Assert.assertEquals(aa, bb);则会在失败时返回类似的Expected 1, but the actual result was 2的信息,这样的错误信息更有价值。

  不要执着于测试覆盖率

  谈到单元测试,就会想到测试覆盖率。测试覆盖率主要指的是代码路径覆盖率和分支覆盖率。

  在编写单元测试时难免会陷入一味追求100%测试覆盖率的陷阱。100%测试覆盖率是一个很难实现的愿景,100% 的覆盖率并不意味着你已经覆盖了所有的边缘情况,它只是意味着所有的代码路径都被执行了。

  在实际测试过程中,我们应该关注的是测试功能是否覆盖而不是单元代码路径是否被全部覆盖。例如:对于具有相同代码的文件(同一代码块复制粘贴),追求100%的测试覆盖率会导致测试冗余。

  因此,我们应该从保障功能正常的角度出发编写单元测试用例,而不是针对每个单元函数编写单元测试用例。

  那么,如何从功能的角度出发编写单元测试用例呢?最简单的一点就是查看被调用的函数模块。

  若某个模块被上层功能函数调用,那么这个模块就需要我们编写单元测试用例进行守护。

  最好有注释

  注释可以帮助其他阅读代码的人员更快地理解代码,单元测试也是代码,因此养成注释地习惯可以提高你编写代码的素养。

  适当地给单元测试用例分类,提高运行效率

  单元测试用例和集成测试用例、系统测试用例一样,当测试用例数量变得很大时,每次修改部分代码运行所有的单元测试用例显得累赘。

  这个时候如果你的单元测试用例有明确的分类,那么就能提高运行效率。

  如下图5所示:该单元测试标签为”unit”,在运行时可以根据“unit”标签选中该单元测试用例。

1-5.png

图5 单元测试标签样例


  上述单元测试小技巧,希望能帮助各位单元测试初学者。



作者:刘晓佳Rachel   

来源:http://www.51testing.com/html/74/n-6657974.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 沐沐一开始学习python的时候也会觉得枯燥无味,面对各种python的变量、赋值、数字、字符串、列表、元祖等基本知识总是昏昏欲睡。似乎怎么学习都很难将python应用于实际的测试工作。直到我遇到了django,才慢慢的对python有了进一步的实践和认知,所以很有必要安利给大家。比如大家可以用django框架进行简单的博客开发、测试框架开发等、或者可以下载一些开源的测试框架,在本地搭建起来后,熟悉框架的源码,会在框架学习的过程中,慢慢掌握python的各种语法。这里先简单介绍一下,Django是一个开源的Web应用框架,是Python众多框架中的爆款,采用了经典的MVC设计模式。Django...
            1 0 3962
            分享
          •   作为一个测试,最尴尬的莫过于分给你的task,别人做交叉兼容测试的时候,在你负责的内容里找出了很多你没有测试出来的bug。  我也曾因为测试不全被组长在工作群里艾特。说实话,真的恨不得找个地方躲起来。  为了避免自己再次出现类似的情况,我开始写测试笔记。记录负责task中需要测试的内容,然后不断的重复研究测试,这种情况就基本没有了。  复杂的测试笔记,我写了有两年,后来慢慢发现好多东西都是相通的。于是,我整理了一个做测试的模板,每次新分配给我task时,我都按我自己的模板测试。  我做的工作是黑盒测试,基本属于纯黑盒。测试的有web端,android手机端和ios手机端,偶尔也会测试手机带...
            0 0 743
            分享
          • 我爬取了8483条测试工程师招聘需求,竟发现……软件测试要做些什么?软件测试需要掌握什么技能?软件测试有发展前景吗?……针对以上问题,谭叔写过文章介绍,也做过线上分享,你可以翻翻之前推送的文章。但我总觉得还差个东西——软件测试的职业环境。就我个人来说,我每隔一段时间(或半年、或一年)便会审视、总结软件测试职业,给自己的未来一个交代。最近,借金三银四招聘旺季的契机,我爬取了某招聘网站8483条测试工程师的用人需求,通过分析这些数据,跟大家讲一讲软件测试的职业环境。具体请看:数据爬取、数据清洗、数据分析数据爬取我不喜欢重复造轮子,在分析之前,我依旧在网上浏览,却发现并无多少博主通过分析招聘需求来研...
            14 14 3273
            分享
          •   有一份51Testing测试行业调查问卷需要您的助力,差不多三分钟的时间即可填完。我们给您准备了一份价值398元的测试课程作为礼品,感谢您的帮忙~链接:http://vote.51testing.com/  项目监控:  通过对软件项目实施跟踪和监控,可以为各级管理人员提供足够的可视性。  项目监控的目的是在项目计划发布后,通过定期检查项目计划中各种参数从而客观地了解项目的进展情况,并且在项目的进展情况与项目计划有较大偏差时,管理层及客户能够及时地做出调整,并采取有效措施,以使项目回到正常的轨道。  项目监控的方法非常简单,但关键的一点就是要将对项目跟踪和监控的内容和过程文档化,它是监控各...
            0 0 844
            分享
          •   日前,吉祥航空母公司均瑶集团举行吉祥大出行空中全球发布会,正式发布了“吉祥大出行”战略以及智能出行科技品牌“吉祥汽车”。  不过,官方在发布会上并未公布新车详细信息,仅透露吉祥汽车旗下首款产品预计在明年第二季度于国内上市,第三季度走向海外市场。  据介绍,该车将拥有吉祥汽车全栈自研的、具有独立知识产权的全新智能电动平台,一开始就按照中欧双五星安全标准打造,是适合全球市场的智能终端。  新车采用一体式设计,理念来源于航空美学的“极简主义”,灵感来源于人类抬头仰望数千年的苍穹。  吉祥汽车主理人张广浩表示,流畅的整车姿态,实现同级别车型最优风阻系数。  据国内媒体报道,上海均瑶(集团)有限公司...
            0 0 1009
            分享
      • 51testing软件测试圈微信