Я начинаю писать простую программу на C и хотел бы сохранить конфигурацию на диске. Чтобы упростить правильное и правильное модульное тестирование, я хотел бы сделать что-то, чтобы тестируемый код не читал и не записывал на диск.
Формат файла конфигурации, в качестве аргумента, является YAML.
API к программе может выглядеть примерно так:
myapp config
Будет сбрасывать весь конфиг. (где есть уже существующий файл конфигурации / макет)
myapp config server
Выводит подраздел сервера. (где есть уже существующий файл конфигурации / макет)
myapp config server=example.com
Запишет файл с новым значением (будь то или нет есть уже существующий файл)
Внутренне конфигурация - это просто структура с несколькими ключами, хостом сервера, портом сервера и именем пользователя, из которого можно выполнить некоторые вызовы API.
Меня совершенно не беспокоит положение файла на диске (в каталоге) или синтаксический анализ getopt / CLI, для меня важно просто то, как имитировать сетевые операции и операции с файловой системой.
Вопрос идет на один шаг дальше, и здесь задается вопрос, какие методы можно использовать, чтобы заглушить сеть .
Я, скорее всего, буду использовать cmockery и libcurl.
Одной из моих первых мыслей было: «Может быть, я должен создать такую функцию, как read_configuration_file()
, которую я могу смоделировать в своих модульных тестах», но я действительно не уверен в достоинствах этого, код в ruby, чтобы заглушить Файловая система может быть такой простой, как:
File.stubs(:read).with('./configuration.yml').returns("---\nserver: example.com\n")
И, исходя из этого фона, думая в C
терминах, я нахожу довольно трудным.
Я заметил, что не многие люди, кажется, тестируют этот материал на C, или, в частности, если они это делают - они не пишут об этом.
Примечание: Это не домашнее задание, оно просто звучало так, будто после того, как я написал все это, я на самом деле просто пытаюсь изучить C, исходя из Ruby-фона. ; Вы могли бы заметить некоторые другие мои вопросы на тему попыток сделать C
«правильными».