三元变量的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) )
// ...
我正在检查 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) )
// ...