2

我正在使用Cmocka进行单元测试,并且无法更改。

我正在测试我的软件的一部分,它调用回调函数,如果值更改,指示哪个数据项更改以及新值是什么。

回调函数具有以下签名:

typedef void (* Value_changed_call_back) (int item_Id, int new_value);

对于单元测试,我想注册一些回调函数并确保它们被实际调用,并且它们接收到正确的参数。

我可以expect_int()在我的模拟中使用,以验证它们是否使用正确的参数调用。

但是,我看不出我可以如何使用will_return(),因为我的回调函数是类型的void(并且无法更改)。

我将如何声明一个模拟回调函数并验证它是否使用正确的参数调用?请注意,如果未调用该函数,则测试应该失败。

4

2 回答 2

2

我在CMocka API中看到了这篇文章并考虑了这一点。您可以使用expect_function_call(func)来指示应该调用哪个函数,并function_called()在回调中将函数标记为已调用。

我不确定此功能可用多长时间(但存在于 1.1.5 版本中)。

我回答了这个问题,以防有人遇到这个话题,即使这是 2016 年的问题。

于 2020-09-09T06:47:46.920 回答
1

我认为做你想做的最好的方法是为回调创建一个存根并注册它。然后在回调中将一些全局变量设置为一个值。然后,您将能够断言在您的存根函数中设置的值。只要断言和回调在同一个线程上执行以确保断言不是竞争条件,这就会起作用。

于 2016-06-15T21:00:20.700 回答