2016-09-22 3 views
1

Мне интересно, какой хороший способ прочитать конфигурационный или локальный файл во время модульного тестирования.Что такое хороший способ открыть конфиги или файлы во время модульного теста в python?

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

def setUp(self): 
    self.config = ConfigParser.RawConfigParser() 
    self.config.add_section('TestingSection') 
    self.config.set('TestingSection', 'x', '1') 

    with open('local_file.txt', 'w') as f: 
     f.write('testing_value') 

или файлы могут быть подготовлены до тестирования, и мы просто открыть их во время тестирования, например:

def setUp(self): 
    self.config = ConfigParser.RawConfigParser() 
    self.config('local_config_file_path') 

    with open('local_file.txt', 'r') as f: 
     self.testing_value = f.read() 

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

Если у вас есть лучший подход к нему, пожалуйста, поделитесь со мной.

спасибо.

+0

Лучше всего не использовать реальные файлы. – RemcoGerlich

+0

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

ответ

1

Хороший способ - не открывать их вообще.

Для ваших функций, основанных на файле конфигурации, вы можете создать поддельный объект, который реализует требуемые методы, на которые опирается ваша конкретная функция. Это может быть просто метод get, который поддерживает получение «раздела».

Это эксплуатация duck typing. Вашим функциям python все равно, какой фактический объект они получают, AS LONG, поскольку он реализует методы парсер-конфигурации, которые он ожидает.

В какой-то момент вам нужно проверить «край» вашего приложения, точку входа. Я предполагаю, что функция точки входа выполняется, и она загружает и анализирует файл конфигурации из файловой системы. Один тест должен иметь возможность проверить это, поскольку анализатор конфигурации уже протестирован в ядре python.

В этом тесте я бы создал named temporary file и использовал этот путь в качестве входных данных в вашу основную функцию, чтобы убедиться, что он может хотя бы выполнить без ошибок. Это может технически быть интеграционным тестом, поскольку он взаимодействует с файловой системой.

+0

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

+0

Да! Генерируйте временный объект во время выполнения, во время установки теста, который реализует методы, которые требуется реализовать ConfigParser. – dm03514