关于C#:Cmocka-错误:没有符号输入

Cmocka - Error: No Entries for symbol

我只是从Cmocka开始,我已经在这个问题上停留了一段时间。我有一个想要构建的cmocka项目。我在尝试使用" make"时看到错误。

[ ERROR ] --- No entries for symbol __wrap_i2c_read.

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

Could not get value to mock function __wrap_i2c_read.

现在,我只是想模拟一个true / false值以使其正常工作。所以我的模拟看起来像

1
2
3
4
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:好的,看来我只是没有排队足够的模拟值。


您的编辑2就是线索!

您必须像调用mock一样频繁地调用will_return

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

也许您想使用will_return_alwayswill_return_count