Cmocka - Ошибка: нет записей для символа
Я только начинаю с 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: Хорошо, похоже, я просто не ставил в очередь достаточно ложных значений.
1 ответ
Ваша правка 2 - это Clou!
Вы должны вызывать "will_return" так часто, как называется "mock".
Для каждого вызова вашего FUT (тестируемой функции) вызывается "mock()". Поэтому вам нужно использовать "will_return", прежде чем вы будете звонить в FUT так часто, как вы собираетесь звонить в FUT. "Will_return" помещает один элемент в стек. "Mock ()" возьмет один элемент из этого стека. Таким образом, вызов "will_return" один раз и "mock()" два раза вызовет недостаточное заполнение, что приведет к указанной вами ошибке cmocka.
Можете ли вы использовать "will_return_always" или "will_return_count".
редактировать: извините за плохое выделение. Сидеть на кухне и печатать на моем смартфоне не так удобно. Я собираюсь украсить это позже на моем компьютере.