Как Cmocka может проверить, что моя (пустая) функция обратного вызова была вызвана с правильными параметрами?

Я использую Cmocka для модульного тестирования, и это не может быть изменено.

Я тестирую часть своего программного обеспечения, которая вызывает функции обратного вызова, если значение изменяется, указывая, какой элемент данных изменился и каково новое значение.

Функции обратного вызова имеют эту подпись:

typedef void (* Value_changed_call_back) (int item_Id, int new_value);

Для модульного теста я хочу зарегистрировать некоторые функции обратного вызова и убедиться, что они действительно вызваны и что они получают правильные параметры.

я могу использовать expect_int() в моих издевательствах, чтобы проверить, что они вызываются с правильными параметрами.

Но я не понимаю, как я могу использовать will_return() так как мои функции обратного вызова имеют тип void (и это не может быть изменено).

Как мне объявить фиктивную функцию обратного вызова и убедиться, что она вызывается с правильными параметрами? Обратите внимание, что если функция не вызывается, то проверка должна завершиться неудачей.

1 ответ

Решение

Я думаю, что лучший способ сделать то, что вы хотите, это создать заглушку для обратного вызова и зарегистрировать ее. Затем внутри обратного вызова вы устанавливаете некоторую глобальную переменную в значение. Тогда вы сможете утверждать то значение, которое установлено в вашей функции-заглушке. Это работает до тех пор, пока assert и обратный вызов выполняются в одном потоке, чтобы убедиться, что assert не является условием гонки.

Я видел этот пост и думал об этом в CMocka API. Вы можете использовать expect_function_call(func) указывает, какая функция должна быть вызвана, и function_called() в обратном вызове, чтобы отметить функцию как вызванную.

Я не уверен, как долго эта функция доступна (но присутствует в версии 1.1.5).

Я ответил на этот вопрос на случай, если кто-то столкнется с этой темой, даже если это вопрос 2016 года.

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