三元变量的Google测试怎么写?

How to write Google test for ternary variable?

我正在检查 return 类型值的一些配置条件。这是一段功能代码。

typdef enum{
    type1 = 0,
    type2,
    type3,
    type4,
    type5
}

#define config  (uint8) ((type1_enble()) ? (type1) :
    (((type2_enable())? (type2) :
    ((type3_enable())? (type3):
    (type4_enable())?(type4):(type5)))))

int process_input(void)
{
    int result = type1;
    
    if( (config == type1) || (config == type2) )
    {
        result = type1;
    }
    else if(config == type3)
    {
        result = type3;
    }
    else
    {
        /**/
    }
    return result;
}

现在我想使用 google 测试来测试函数代码。

//这是输入集

make_tuple(0,0,0,0)
make_tuple(0,1,0,0)
make_tuple(0,0,1,0)
make_tuple(0,0,0,1)
make_tuple(1,1,1,1)

//测试代码

TEST_P(test_config , test1)
{
    ON_CALL(mock, type1_enble()).WillByDefault(input1);
    ON_CALL(mock, type2_enble()).WillByDefault(input2);
    ON_CALL(mock, type3_enble()).WillByDefault(input3);
    ON_CALL(mock, type4_enble()).WillByDefault(input4);
    process_input();
}

但是在这里我不知道如何使代码完全覆盖。特别是三元变量。当我 运行 测试用例时,我没有获得 100% 的代码覆盖率。这里有什么问题,尤其是三元变量吗?

每次扩展 config 宏时,该复合表达式的每个分支都会被注入到代码中,这意味着大约有 125 个不同的代码路径通过该函数。

因此,要全面了解编写的函数,您需要遍历 typex_enble() 的所有排列以进行重复调用。也就是说,您需要在第一次调用时考虑 type1_enble() returning 0,在第二次调用时考虑 1。

如果重复调用 typex_enble() 总是 return 相同的值,那么您应该只对表达式求值一次:

int process_input(void)
{
    auto cfg = config;
    int result = type1;
    
    if( (cfg == type1) || (cfg== type2) )
    // ...