首页 > 解决方案 > 使用 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 作为断言库。

标签: unit-testingembeddedcmocka

解决方案


根据您的测试,您正在测试的功能是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,而是调用 this 的其他函数(您没有提到)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.


推荐阅读