bounty将在2天后过期。回答此问题可获得+50的声誉奖励。Tom Willis正在寻找来自声誉良好来源的答案。
我正在使用mocka对一个C项目进行单元测试。
我想模拟一个在测试中的C函数对另一个模块的调用。另一个模块中的这个函数处理双精度数,而不是整型数。will_return
文档说它传递整数值,我可以看到,如果我调用will_return(__wrap_other_func, 42.99)
,那么传递到__wrap_other_func
并通过double value = mock_type(double)
取出的值将是42.0
,而不是所需的42.99
。
double __wrap_other_func(double param) {
check_expected(param);
double value = mock_type(double); // will_return() has converted this, effectively rounding
fprintf(stderr, "%lf\n", value);
return value;
}
static void test_this_func(void **state) {
(void) state;
expect_value(__wrap_other_func, param, 1.0);
will_return(__wrap_other_func, 42.99);
int result = this_func(12.34); // this_func() will call other_func()
...
assert(result == 0);
/* the assert is failing because the double 42.99 is converted to an integer,
then back to a double, rounding off all the decimal places. */
}
> 42.0
有人知道如何用will_return
或其他cmocka方法将double传递给mock函数吗?
我希望能够使用cmocka将非整数值传递给我的mock函数。
当我尝试使用will_return()
时,我发现所有双精度值都被舍入为整数等价值。
我仔细阅读了cmocka文档,并在线搜索了cmocka示例。
1条答案
按热度按时间oo7oh9g91#
预期的方法是使用
will_return_float
和mock_float
还有其他"赋值"宏:
使用而不是"强制转换"宏
will_return
和mock_type
旁注:
mock_float
不接受宏参数,到目前为止,它们将值存储为double