在正式开启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内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。