Как выполнить тестирование Python ConfigParser - PullRequest
0 голосов
/ 22 марта 2019

Я использую ConfigParser для чтения INI-файла в проекте Python (2.7). Теперь я хочу написать Unittest, и я не уверен, каков самый чистый способ проверить это.

Я уже пытался адаптировать метод init класса, который читает INI-файл, чтобы я мог передать файл, который должен использоваться в качестве параметра. как это:

def __ini__(self, config_file='/src/config/my_conf.ini'):
    self.conf = ConfigParser.SafeConfigParser()
    self.conf.read(config_file)

отлично работает в производстве. Однако мне не удается запустить его в юнит-тесте. Файл конфигурации никогда не доступен. Не имеет значения, использую ли я значение по умолчанию или меняю его на «/test/config/my_conf.ini». Я бы предпочел использовать относительные пути.

Может кто-нибудь сказать мне, что я делаю неправильно с путем в unittest. Или у кого-то есть идея получше?

Большое спасибо!

1 Ответ

0 голосов
/ 27 марта 2019

Распространенным решением для такого рода проблем является то, что во время модульного тестирования вы просто не обращаетесь к реальному файлу. Вместо этого вы «высмеиваете» функциональность, которая читает содержимое файла. Затем эта имитация контролируется тестом, так что для каждого тестового примера ваша фиктивная функциональность возвращает данные, как если бы они были прочитаны из файла.

Это не обязательно делать на уровне доступа к файлу. В вашем примере вы также можете высмеивать ConfigParser.SafeConfigParser(). То есть во время тестирования ваш код не получит доступ к истинному парсеру конфигурации, а только к некоторому макету, который ведет себя как единое целое и фактически контролируется тестовым кодом.

Однако в вашем коде это потребует некоторой хитрости: способ написания функции __init__ затрудняет получение контроля из кода модульного теста. Таким образом, рекомендуется изменить код так, чтобы тестовый код имел больший контроль над доступом к файлу или анализатором конфигурации. Ищите «инверсию контроля», чтобы узнать больше о том, как это можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...