Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用GoogleTestC语言测试覆盖将字符数组转换为结构的函数的所有分支_C_Googletest - Fatal编程技术网

如何使用GoogleTestC语言测试覆盖将字符数组转换为结构的函数的所有分支

如何使用GoogleTestC语言测试覆盖将字符数组转换为结构的函数的所有分支,c,googletest,C,Googletest,我正在练习google test C。在为function\u 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 *

我正在练习google test C。在为
function\u 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)
不帮助您将数组第一个元素的值传递到struct
name
b
字段中

因此
name->b
总是有一些随机值,在这些情况下,值恰好与
1
2
不同,因此您得到了
else
分支

您需要为
name
分配内存,然后将
abc[0]
的值分配给字段
b

    ABCXYZ *name = (ABCXYZ *) malloc (sizeof (ABCXYZ)); 
    name->b = abc[0];

p/s:不过这个函数很复杂

你应该用递增的数字填充一个大数组,例如,
char数组[32]={1,2,3,4,5,6,7,8,9,10}并将其传递给函数。然后修改函数以打印
name->b
。这样,您就知道
name->b
abc
参数中的位置了。顺便说一句,我很确定
函数_1
违反了严格的别名规则,因此具有未定义的行为。我如何修复它?据我所知,a是一个int变量(4字节),b是一个char变量(1字节),因此
abc+4
类似于
name->b
。是吗?@Tiế不,那行代码太乱了
abc+4
是数组中第四个元素的地址,您可以将该地址分配给结构指针
名称
!这样做是为了更好地理解printf(“abc地址%p\n”,abc)
printf(“abc+4%p\n的地址”,abc+4)
printf(“名称%p\n的地址”,名称)
printf(“姓名地址->b%p\n”,&name->b)我测试正常,我应该在arr[8]处设置1或2或其他。