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".

редактировать: извините за плохое выделение. Сидеть на кухне и печатать на моем смартфоне не так удобно. Я собираюсь украсить это позже на моем компьютере.

Другие вопросы по тегам