2016-06-07 28 views
2

我正在使用Cmocka进行单元测试,并且无法更改。Cmocka如何测试使用正确的参数调用了我的(void)回调函数?

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

的回调函数有这样的签名:

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

对于单元测试,我想注册一些回调函数,并确保它们实际上是调用,他们获得正确的参数。

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

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

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

回答

1

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

+0

Sicne你是唯一回答的人,我会把问题和奖励分给你。如果我不这样做,系统会自动奖励你,但你只能获得一半的积分。欢迎来到Stack Overflow,并感谢您的帮助。 – Mawg

+1

@Mawg谢谢,我确实花时间浏览了cmocha文档,这是我能想到的唯一解决方案。当我关心过去在测试中的执行顺序时,我做了类似的全局变量设置。 –

+0

该文档不是很好,是吗?实际上,对于最初由Google开发的内容,缺乏可用的信息。然而,使用GCC的链接器'wrap'选项的模拟函数的方式非常甜,以至于我找不到更好的系统。 – Mawg

相关问题