4

我刚开始使用 Cmocka,我已经在这个问题上停留了一段时间。我有一个正在尝试构建的 cmocka 项目。当我尝试使用“make”时,我看到了错误。

[ 错误 ] --- 没有符号 __wrap_i2c_read 的条目。

此外,我在调用的行的 mock_i2c.c 文件中看到错误mock()

无法获得模拟函数 __wrap_i2c_read 的值。

现在我只是想模拟一个真/假值来让它工作。所以我的模拟看起来像

bool __wrap_i2c_read(void)
{
    return (mock());
}

我在我的测试中检查了我正在打电话will_return(__wrap_i2c_read, true);

在我的 Makefile 中,LDFLAGS += -Wl,--wrap=i2c_read 我已经cmocka.h包含在 mock_i2c.c 文件中。

对于这个模拟函数,这似乎不是一个问题,因为如果我不使用它,我会在该文件中的其他模拟函数中得到相同的错误。我不确定还需要什么其他信息,请告诉我。有人知道这是什么意思/以前见过吗?

谢谢。

编辑:所以我想我已经弄清楚为什么会出现这个错误。我正在测试的函数中有一个for循环。从这个函数调用模拟函数。一旦我删除循环,错误就会消失。这可能与will_return模拟值如何/何时排队有关吗?for循环阻碍了?

Edit2:好的,看来我只是没有排队足够的模拟值。

4

1 回答 1

2

您的编辑 2 是线索!

你必须will_return经常mock打电话。

每次调用您的 FUT(被测函数)mock()都会被调用。因此,will_return在调用 FUT 之前,您需要像调用 FUT 一样经常使用。will_return将一个元素放入堆栈。mock()将从该堆栈中获取一个元素。因此,调用will_return一次和mock()两次将导致下溢,最终导致您提到的 cmocka 错误。

也许您想使用will_return_alwayswill_return_count

于 2017-07-02T12:05:54.877 回答