Я пишу обертку для ConfigParser
в Python, чтобы обеспечить удобный интерфейс для хранения и получения настроек приложения.Файл тестирования модулей пишите в Python
Обертка имеет два метода: read
и write
, а также набор свойств для различных параметров приложения.
write
метод просто обертка для write
метода ConfigParser
«s с добавлением также создает объект файла, необходимую ConfigParser
. Это выглядит следующим образом:
def write(self):
f = open(self.path, "w")
try:
self.config_parser.write(f)
finally:
f.close()
Я хотел бы написать модульный тест, который утверждает, что этот метод поднимает IOError, если файл не может быть записан и в другом случае, что метод записи в конфигурации парсер был называется.
Второй тест довольно прост в обращении с макетным объектом. Но вызов open
делает вещи немного сложными. В конце концов, мне нужно создать файл-объект для передачи в парсер конфигурации. Тот факт, что файл действительно будет создан при запуске этого кода, не делает его очень полезным для модульного теста. Есть ли какая-то стратегия для насмешливого создания файла? Может ли этот фрагмент кода каким-то образом протестировать? Или это просто слишком просто для тестирования?
На самом деле это не должно быть в docstring, потому что он ничего не говорит о функции. * Из PEP257: «Он предписывает эффект функции или метода как команду (« Сделать это »,« Вернуть это »), а не как описание, например, не писать« Возвращает путь ... ». * В лучший случай, это должно быть «Raise IOError if ...», но это неправильно, потому что это не ваша функция, которая делает это. –
Это не так. Разрешить распространение ошибки без ловли - это «ререйз». Этот метод вызывает 'IOError', если' open() 'вызывает' IOError'. И хотя я согласен с PEP257, есть больше докстерий, чем * просто * вводная фраза. Это, безусловно, нормальное соглашение о том, чтобы разместить какую-либо документацию, которую вы хотите, в docstring в сочетании с вступительным заявлением. Имея это в виду, вы можете поместить его там как комментарий, если вы считаете его только внутренним или правильно помещаете его в docstring, если считаете его контрактом с пользователем метода. (a * documented * behavior) –
Возможно, как вы говорите, функция содержит так мало «моей собственной системы», что это не полезно тестировать. Спасибо за ваш вклад. –