2017-06-05 109 views
1

我刚刚开始使用Cmocka,我一直在这个问题上停留了一段时间。我有一个我正在尝试构建的cmocka项目。我在尝试使用'make'时看到错误。Cmocka - 错误:符号没有条目

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

而且我看到在mock_i2c.c文件中的错误,在这里我呼吁mock()

Could not get value to mock function __wrap_i2c_read.

现在我只是想嘲笑真/假值获得行它工作。所以我假装貌似

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

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

在我的Makefile我有LDFLAGS += -Wl,--wrap=i2c_readcmocka.h列入mock_i2c.c文件。

这似乎不是一个专门针对这个模拟函数的问题,因为如果我不使用它,我会得到该文件中其他模拟函数的相同错误。 我不确定需要其他信息,请让我知道。任何人都知道这意味着什么/看到这之前?

谢谢。

编辑:所以我想我已经找出了为什么我得到这个错误。我正在测试的函数中有一个for循环。模拟函数从这个函数中被调用。一旦我删除循环,错误消失。这可能与will_return如何排队模拟值有关?并且for循环正在妨碍?

编辑2:好的,所以看起来我只是没有足够的模拟值排队。

回答

0

您的编辑2是clou!

您必须像调用'amock'那样经常调用'will_return'。

对于您的FUT(被测试函数)的每个调用,都会调用“amock()”。所以在你打电话给你的FUT之前,你需要使用'will_return'。 'will_return'将一个元素放到堆栈上。 ()'将从这个堆栈中获取一个元素。因此,一次调用'will_return'和两次调用'()'会导致下溢,最终导致您提到的cmocka错误。

可能想使用'will_return_always'或'will_return_count'。

编辑:对不起,highliting。坐在厨房里,在我的智能手机上打字并不舒适。我将在以后在我的电脑上使用。