我正在尝试使用cmocka模拟一些函数:
void test_led_driver_NeedToImplement(void **state)
{
state_t current = CLEAR;
will_return(led_status_toggel,SET);
TEST_ASSERT_EQUAL(SET, led_status_toggel(current));
}但是,我得到一个错误: led_status_toggel()有剩余的非返回值。我必须为我的函数创建一个模拟文件吗?或者这个错误的来源是什么?Ps:我使用unity.h作为断言库。
发布于 2021-07-02 18:43:19
根据您的测试,看起来您正在测试的函数是led_status_toggel。如果是这样的话,你就不应该嘲笑它。你应该删除will_return(led_status_toggel,SET);,因为你的led_status_toggel可能是这样的(你不会分享它,所以我不确切知道):
state_t led_status_toggel(state_t state)
{
if (state == CLEAR)
{
return SET;
}
return CLEAR;
}如果您测试的函数不是led_status_toggel,而是调用此led_status_toggel的其他函数(您没有提到),那么您可以像这样模拟此函数
state_t __wrap_led_status_toggel(state_t state)
{
return (state_t)mock();
}并在构建命令中使用-Wl,--wrap=led_status_toggel。使用--wrap链接器标志,当您执行测试时,将调用模拟函数__wrap_led_status_toggel,而不是原始的led_status_toggel。
https://stackoverflow.com/questions/68221813
复制相似问题