单元测试框架:从零开始使用GoogleTest

发表于:2021-10-22 09:49

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Ron    来源:51Testing软件测试网原创

  在正式开启GoogleTest之旅前,先介绍一点术语,以便平滑过渡。

  黑盒和白盒
  所谓黑盒,将待测对象看成一个黑盒子,测试时不关心功能是如何实现的,仅关注输入数据和实际输出结果,核对实际输出是否与预期输出一致。
  功能测试采用的就是黑盒测试技术,如下就是一条手机的功能测试用例,测试步骤对应输入(点击图标)、预期结果对应输出(打开应用)。

  所谓白盒,简单来说就是代码层面的测试。测试人员需要了解功能是如何编码实现的(需要读懂代码)。
  单元测试就是代码层面的测试,举个例子。Absolute( )函数实现了求整数绝对值的功能:
int Absolute(int n)  
{  
    if (n > 0)  
        return n;  
    else if (n < 0)  
        return n * -1;  

  浏览Absolute( )函数,可以看出它的代码存在明显bug:没有考虑输入为0的情况。
  运行程序,当输入数据为0时,输出结果是错误的:

  通过上面的示例,相信大家对单元测试有了一个比较直观的印象了,下面给出单元测试的定义。
  产品代码中的 一个函数、一个类 或 一个接口均可以看成一个单元,针对这些单元的代码级测试就是单元测试。
  单元测试的对象是一个个“单元”,单元测试可以发现待测对象中的代码级故障,对产品整体性错误无能为力。
  虽然单元测试有其局限性,但是良好的单元测试可以保障一个单元模块的代码正确性,即:该单元被其他模块调用时,自身是没有代码问题的。

  GoogleTest
  GoogleTest 是Google公司开发的一款C++单元测试框架,Google Chrome浏览器使用的测试框架就是GoogleTest。
  对于使用C++开发的产品,可以通过GTest编写单元测试用例进行单元测试。
  为什么要编写单元测试用例,上面的Absolute( )函数进行代码走查不就搞定了吗?
  光是走查(没有对应的单元测试用例),当代码变更后,需要重新走查,之前的走查成果无法继承。
  随着单元模块逻辑复杂度的提升,必须编写测试代码进行代码质量的保障(大神除外)。
  对于拥有单元测试用例的模块,当此单元进行较大的代码优化后,可以通过已有的单元测试用例快速评估优化后的代码质量、及时发现代码错误。
  为什么要使用测试框架,直接单元测试不香吗?先说结论:不香,直接编写测试用例进行单元测试整体效率要低得多。
  测试框架是对整个测试系统的可重复使用设计,可重复意味着自动化。有了测试框架,测试人员不再需要编写琐碎的测试代码,从而可以专注于测试用例本身,使得测试更聚焦。
  好的单元测试框架及Google Test的优势(摘自GoogleTest Primer.md,你理解为GTest自己吹捧自己也没错)。

  测试是独立和可重复的
  GTest使每个测试用例运行在不同的对象中从而使测试隔离。
  当一个测试失败时,GTest允许你将它运行在隔离的环境下从而达到快速调试的目的。


......
查看更多精彩内容,请点击下载:
  版权声明:本文出自《51测试天地》第六十三期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号