Есть ли способ смоделировать статическую глобальную переменную для использования в тестовой функции? Или какой-нибудь обходной путь для этого?
Ниже приведен пример такой ситуации:
static zsock_t *publish_logs = NULL;
int btak_log_message_reactor(zloop_t *loop, zsock_t *reader, void *arg) {
struct btak_log_message *message;
size_t message_size;
if(zsock_recv(reader, "b", &message, &message_size) == 0) {
push_log_message(message);
if(publish_logs)
publish_log_message(message, publish_logs);
free(message);
}
return 0;
}
Мы часто забываем о компоновщике. Мы можем использовать другой объектный файл для макета интерфейса. Этот mock-obj будет содержать другое определение вашего глобала.
Но текущие фреймворки модульных тестов работают только на уровне кода … Так что для добавления фиктивных объектов в тестовую сборку понадобится некоторое build-fu.
Других решений пока нет …