CPPUnit是基于C++的单元测试框架,可以有效提高开发的系统质量。
引言:
QA过程常采用两种测试方法:
1、单元测试(acceptance测试):为软件系统中的每一个逻辑单元制定的一系列验证方法。仅测试单元的功能,而不考虑各个单元之间的协作关系。
2、系统测试(集成测试):测试系统的功能,尤其是各单元模块之间的协作关系。
下面要讲的是如何采用CPPUnit对C/C++工程进行单元测试。
文章假设读者熟悉单元测试的概念及其重要性。
单元测试设计:
想一下开发团队中常常出现的一种场景:程序员正在使用Debugger工具测试代码。采用Debugger工具可以可以随时随地检查每个变量。步步跟踪,检查变量的值是否异常。Debugger是一种强有力的调试工具,但是调试速度相当慢,并且包含不少错误。在这种情况下调试是让人崩溃的。这些复杂有大量重复的验证方法是可以通过自动化的手段完成的,需要做的是选择合适的工具并编写少量代码。
下面要介绍的工具叫做“单元测试框架”,借助这种工具,可以通过编写一些小的模块来完成模块(可以是类、函数和库)的单元测试。
下面来看一个例子:编写一个小的模块,主要功能是求两数之和。其C语言代码如下:
BOOL addition(int a, int b)
{
return (a + b);
}
测试单元编写成另外一个模块(C函数)。该模块测试所有可能的求两数之和的组合,通过返回True或False来判断被测模块是否通过了测试。代码如下:
BOOL additionTest()
{
if ( addition(1, 2) != 3)
{
return (FALSE);
}
if ( addition(0, 0) != 0)
{
return (FALSE);
}
if ( addition(10, 0) != 10)
{
return (FALSE);
}
if ( addition(-8, 0) != -8)
{
return (FALSE);
}
if ( addition(5, -5) != 0)
{
return (FALSE);
}
if ( addition(-5, 2) != -3)
{
return (FALSE);
}
if ( addition(-4, -1) != -5)
{
return (FALSE);
}
return (TRUE);
}
测试的情况包括:
正数+正数
0+0
正数+0
负数+0
正数+负数
负数+正数
负数+负数
每一次测试都是通过对比被测模块的返回值和期望值,如果二者不同,返回FALSE。如果终返回TRUE,说明模块通过了所有的测试。
这个用以测试其他模块的小模块(函数)被称为Test Case, 其中包含了程序员需要对被测单元的一系列检查。每一个确认(对被测单元的一次调用)都必须和被测单元相对应。在这个例子中,检查了“求和操作”在操作数符号不同的情况下的运行情况。当然了,还需要另外写一些Test Case来验证其他情况下的运行情况。比如其他一些常见的加法组合。