如何测试覆盖函数转换字符数组的所有分支以使用 Google 测试 C 语言
How to Test to cover all branchs of function casting char array to struct use Google test C language
正在练习google测试C,写function_1
函数的测试用例时有点迷茫
typedef struct
{
int a; //4 byte
char b; //1 byte
char c; //1 byte
char d; //1 byte
char arr[3]; //3 byte
}ABCXYZ;
static void function_1(char *abc)
{
if (abc != null)
{
ABCXYZ *name =(ABCXYZ *)(abc + 4);
if (name->b == 1)
printf("ONE");
else if (name->b == 2)
printf("TWO");
else
printf("OTHER");
}
else
{
printf("INVALID");
}
}
我写过这样的测试用例:
TEST(Test_function_1,abc_null)
{
function_1(null);
}
TEST(Test_function_1,one)
{
char arr[10]={1,0,0,0,0,0,0,0,0,0};
function_1(arr);
}
TEST(Test_function_1,two)
{
char arr[10]={2,0,0,0,0,0,0,0,0,0};
function_1(arr);
}
TEST(Test_function_1,other)
{
char arr[10]={3,0,0,0,0,0,0,0,0,0};
function_1(arr);
}
但是当我检查结果并报告覆盖率时 html,它并没有覆盖函数中的所有分支。我如何更改测试用例以覆盖整个分支?
不是测试用例的问题,而是你的函数有问题。
这行代码ABCXYZ *name =(ABCXYZ *)(abc + 4);
并没有帮助你将数组第一个元素的值传递到structname
的字段b
中。
所以 name->b
总是有一些随机值,在这些情况下,值恰好与 1
和 2
不同,所以你得到了 else
分支。
您需要为 name
分配内存,然后将 abc[0]
的值分配给字段 b
:
ABCXYZ *name = (ABCXYZ *) malloc (sizeof (ABCXYZ));
name->b = abc[0];
p/s:虽然这个函数很奇怪。
正在练习google测试C,写function_1
函数的测试用例时有点迷茫
typedef struct
{
int a; //4 byte
char b; //1 byte
char c; //1 byte
char d; //1 byte
char arr[3]; //3 byte
}ABCXYZ;
static void function_1(char *abc)
{
if (abc != null)
{
ABCXYZ *name =(ABCXYZ *)(abc + 4);
if (name->b == 1)
printf("ONE");
else if (name->b == 2)
printf("TWO");
else
printf("OTHER");
}
else
{
printf("INVALID");
}
}
我写过这样的测试用例:
TEST(Test_function_1,abc_null)
{
function_1(null);
}
TEST(Test_function_1,one)
{
char arr[10]={1,0,0,0,0,0,0,0,0,0};
function_1(arr);
}
TEST(Test_function_1,two)
{
char arr[10]={2,0,0,0,0,0,0,0,0,0};
function_1(arr);
}
TEST(Test_function_1,other)
{
char arr[10]={3,0,0,0,0,0,0,0,0,0};
function_1(arr);
}
但是当我检查结果并报告覆盖率时 html,它并没有覆盖函数中的所有分支。我如何更改测试用例以覆盖整个分支?
不是测试用例的问题,而是你的函数有问题。
这行代码ABCXYZ *name =(ABCXYZ *)(abc + 4);
并没有帮助你将数组第一个元素的值传递到structname
的字段b
中。
所以 name->b
总是有一些随机值,在这些情况下,值恰好与 1
和 2
不同,所以你得到了 else
分支。
您需要为 name
分配内存,然后将 abc[0]
的值分配给字段 b
:
ABCXYZ *name = (ABCXYZ *) malloc (sizeof (ABCXYZ));
name->b = abc[0];
p/s:虽然这个函数很奇怪。