使用 cmocka 模拟函数

Mocking functions with cmocka

我正在尝试使用 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 作为断言库。

根据您的测试,您正在测试的功能接缝是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.