如何使用cmocka will_return()将一个双精度值传递给我的C模拟函数?

14ifxucb  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(205)

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示例。

oo7oh9g9

oo7oh9g91#

预期的方法是使用will_return_floatmock_float
还有其他"赋值"宏:

  • x1米2英寸x1米3英寸
  • x1米4英寸x1米5英寸
  • x1米6英寸x1米7英寸
  • 等等。

使用而不是"强制转换"宏will_returnmock_type
旁注:mock_float不接受宏参数,到目前为止,它们将值存储为double

相关问题