Cmocka如何测试我的(void)回调函数是否使用正确的参数调用?

时间:2016-06-07 07:14:35

标签: cmocka

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

我正在测试调用回调函数的软件的一部分,如果值发生变化,则表明哪个数据项发生了变化,以及新值是什么。

回调函数具有以下签名:

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

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

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

但是,我不知道如何使用will_return(),因为我的回调函数属于void类型(并且无法更改)。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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