тест для функции, связанной с файлом в Python - PullRequest
1 голос
/ 19 января 2011

Я довольно новичок в тестировании программного обеспечения. Интересно, как написать модульный тест для функций, связанных с файлами в Python. например, если у меня есть функция копирования файла следующим образом.

def copy_file (self):   
    if not os.path.isdir(dest_path):
        os.makedirs(dest_path)
    try:
        shutil.copy2(src_path, dest_path)
    except IOError as e:
        print e

Что мне делать с проверкой вышеуказанной функции? что я должен утверждать (каталог, содержимое файла, исключения)?

Ответы [ 3 ]

1 голос
/ 19 января 2011

Я думаю, вы можете получить некоторую подсказку от самого test_shutil и посмотреть, как он тестирует функциональность копирования.А именно, он перемещает файлы и проверяет, существует ли он с использованием другого модуля.Различие в поведении стандартного shutil.copy для вашей оболочки заключается в том, что он имеет дело с пунктом назначения, если он еще не существует.В shutil.copy2, если место назначения еще не существует, создается файл, который перемещается из источника, в вашем случае это не файл, а каталог назначения, и вы перемещаете в него свой источник.Поэтому пишите тесты там, где пункт назначения не существует, и убедитесь, что после запуска вашей оболочки, пункт назначения по-прежнему остается каталогом и содержит файл, перемещенный shutil.

1 голос
/ 19 января 2011

Вы можете положиться на shutil.copy2, правильно копирующей содержимое.Вам нужно только проверить ваш код.В этом случае он создает каталоги, если они не существуют, и что он проглатывает ошибки ввода-вывода.;)

0 голосов
/ 19 января 2011

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

  • Метод должен сообщить об ошибке в случае, если source_dir не существует или директор источника или назначения недоступен
  • Метод должен сообщать о создании destination_dir, если он не существует, и сообщать об ошибке, если каталог назначения не может быть создан
  • Метод должен сообщать об ошибке, если каталог источника или назначения имеет недопустимые значения (null или недопустимые символы длякаталоги)
  • Метод должен скопировать все файлы из исходного каталога в каталог назначения
    • проверить, все ли файлы были скопированы
  • Метод должен заменить существующиефайлы ( возможно )
    • проверить, заменяются ли существующие файлы

Это всего лишь некоторые мысли.Не ставьте никаких возможных требований и не проверяйте слишком много, имейте в виду, что вы хотите сделать с этим методом.Если он частный или используется только в вашем собственном коде, вы можете уменьшить область действия, но если вы предоставляете общедоступный API, то вы должны убедиться, что любой вход имеет определенный результат (что может быть ошибкой).сообщение).

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