如何测试以使用Google测试C语言覆盖将字符数组转换为struct的函数的所有分支

问题描述 投票:0回答:1

我正在练习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覆盖率时,它并不覆盖函数中的所有分支。如何更改测试用例以覆盖整个分支?enter image description here

c googletest
1个回答
0
投票

与测试用例无关,但您的功能有问题。

此行代码ABCXYZ *name =(ABCXYZ *)(abc + 4);不能帮助您将数组的第一个元素的值传递到结构b的字段name中。

© www.soinside.com 2019 - 2024. All rights reserved.