“C++test对于复杂结构体指针参数如何测试用例?” -- 来自QQ群讨论系列文章
本文原载于“软件测试工具”介绍软件测试相关内容的专业博客www.mytestlife.com,任何转载均需保留原址。
前言:本文源自软件测试交流qq群(群号:74287645)的群友弦外之音提到的一个问题:对于复杂结构体指针参数,C++test如何测试用例?QQ群的优点在于交流及时有效,但是每次回答完毕后,信息无法保留,因此博主打算以QQ群中群友的提问为主题完成“xxx问题?-- 来自QQ群讨论系列文章“系列文章,QQ群中的回复或者群友关于软件测试的高见,辑录于此,方便更多需要了解这些问题的人,更好的查找。
问题:对于复杂结构体指针参数,C++test如何生成测试用例?
现象:有没有谁用过C++ test?当函数参数为一个结构体的时候,结构体比较深,测试用例自动生成的时候,就会给他赋值为null
回答:
1. 我们一定得清楚没有任何工具是全智能的,尤其在单元测试领域,C++test在单元测试方面具备强大的功能,但他并不能完全替代人工的工作,有些测试用例仍然需要用户做一些修改。比如与功能相关的一些输入值,作为一个通用型的工具,很难分析程序的功能,据此给出恰当的输入值,输出值;
2. 对于该问题而言,C++test提供一个选项可以帮助用户在针对复杂结构体或者类时,可以展开复杂结构体对象进行赋值,下面以简单代码做个例子,首先,我们看看结构体定义:
“
typedef struct ST_A
{
int sta_a;
int sta_b;
}ST_A, * PST_A;
typedef struct ST_B
{
char stb_ch1;
char stb_ch2;
}ST_B, * PST_B;
typedef struct ST_C
{
ST_A stc_sta;
ST_B stc_stb;
char* stc_szBuffer;
}ST_C, *PST_C;
typedef struct ST
{
ST_C st_stc;
int st_n;
char st_c;
double st_dbl;
float st_flt;
char* st_szStr;
unsigned char st_byteArray[10];
}ST, *PST;
”
对于上述结构体,如果通过C++test的默认参数设置,将生成如下图所示的测试用例,可以看到结构体ST,并没有展开:

如果我们在测试用例生成配置窗口中,选中选项:“Use member-wise initialization for class/struct objects”选项,如图:

生成的测试用例,针对结构体ST将会展开其二级结构体,如下图所示:

当然请注意,这些结构体元素的的赋值最好还是根据实际情况做些修改,C++test在测试用例建设这一块,能够较好的辅助客户快速建立大量的测试用例,但不能完全替代人的工作。
更多关于软件测试的文章,欢迎访问“软件测试工具”介绍的专业博客www.mytestlife.com。
原文链接:http://www.mytestlife.com/post/struct_member_wise_cpptest.html
支持博主!
确实是没有工具是完全智能的。
先前碰到过一些比较复杂的结构体。有时候开发人员操作这样的结构的时,会提供一个初始化的函数。以前碰到过一个与CAN相关的,结构体也是很复杂。为了提高覆盖率,得找到对应的初始化函数,然后再测试用例中调用该初始化函数,再做些修改和参数调整,这样才能保证测试用例的正确执行。否则,很难正确的构建好这样一些复杂的结构。