Cmocka 如何测试我的 (void) 回调函数是用正确的参数调用的?
How can Cmocka test that my (void) callback function was called with the correct parameters?
我正在使用 Cmocka 进行单元测试,无法更改。
我正在测试我的软件的一部分,它调用回调函数,如果值发生变化,指示哪个数据项发生变化以及新值是什么。
回调函数具有此签名:
typedef void (* Value_changed_call_back) (int item_Id, int new_value);
为了单元测试,我想注册一些回调函数并确保它们被实际调用,并且它们接收到正确的参数。
我可以在我的模拟中使用 expect_int()
来验证它们是用正确的参数调用的。
但是,我不知道如何使用 will_return()
,因为我的回调函数是 void
类型(并且无法更改)。
我如何声明模拟回调函数并验证它是否使用正确的参数调用?请注意,如果未调用该函数,则测试应该失败。
我认为最好的方法是为回调创建一个存根并注册它。然后在回调中将一些全局变量设置为一个值。然后您将能够断言在您的存根函数中设置的值。只要断言和回调在同一个线程上执行以确保断言不是竞争条件,这就有效。
我看到了这个 post 并在 CMocka API 中想到了这个。
您可以使用 expect_function_call(func)
指示应调用哪个函数,并在回调中使用 function_called()
将函数标记为已调用。
我不确定此功能可用多长时间(但存在于 1.1.5 版本中)。
我回答了这个问题,以防有人遇到这个话题,即使这是 2016 年的问题。
我正在使用 Cmocka 进行单元测试,无法更改。
我正在测试我的软件的一部分,它调用回调函数,如果值发生变化,指示哪个数据项发生变化以及新值是什么。
回调函数具有此签名:
typedef void (* Value_changed_call_back) (int item_Id, int new_value);
为了单元测试,我想注册一些回调函数并确保它们被实际调用,并且它们接收到正确的参数。
我可以在我的模拟中使用 expect_int()
来验证它们是用正确的参数调用的。
但是,我不知道如何使用 will_return()
,因为我的回调函数是 void
类型(并且无法更改)。
我如何声明模拟回调函数并验证它是否使用正确的参数调用?请注意,如果未调用该函数,则测试应该失败。
我认为最好的方法是为回调创建一个存根并注册它。然后在回调中将一些全局变量设置为一个值。然后您将能够断言在您的存根函数中设置的值。只要断言和回调在同一个线程上执行以确保断言不是竞争条件,这就有效。
我看到了这个 post 并在 CMocka API 中想到了这个。
您可以使用 expect_function_call(func)
指示应调用哪个函数,并在回调中使用 function_called()
将函数标记为已调用。
我不确定此功能可用多长时间(但存在于 1.1.5 版本中)。
我回答了这个问题,以防有人遇到这个话题,即使这是 2016 年的问题。