Cmocka - 错误:没有符号条目

时间:2017-06-05 20:20:38

标签: c unit-testing embedded cmocka cmockery

我刚刚开始使用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 我在mock_i2c.c文件中包含cmocka.h

这对于这个模拟函数似乎没有特别的问题,因为如果我不使用它,我会得到该文件中其他模拟函数的相同错误。 我不确定还需要其他信息,请告诉我。任何人都知道这意味着什么/看过这个?

感谢。

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

Edit2:好的,所以我似乎没有排队足够的模拟值。

1 个答案:

答案 0 :(得分:1)

你的编辑2是线索!

您必须在调用will_return时经常致电mock

对于你的FUT的每次调用(被测功能),调用mock()。所以你需要在调用FUT之前使用will_return,因为你要打电话给你的FUT。 will_return将一个元素放入堆栈。 mock()将从此堆栈中获取一个元素。因此,调用will_return一次并mock()两次将导致下溢,最终会出现在您提到的cmocka错误中。

也许您想使用will_return_alwayswill_return_count