тест для функции, связанной с файлом в Python

1

Я новичок в тестировании программного обеспечения. Интересно, как написать unit test для связанных с файлом функций в 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

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

Теги:
file
testing

3 ответа

1
Лучший ответ

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

И не забудьте очистить.;)

  • 0
    привет, Леннарт, спасибо за ваш вклад. Но мне все еще не совсем ясно, что утверждать. Вы хотите утверждать, что выброшенная ошибка равна IOError? извините, у меня нет большого опыта по модульному тестированию. Еще раз спасибо.
  • 0
    Вы утверждаете, что вещи такие, какими они должны быть. Что бы это ни было. «assert» - это просто английское слово, означающее «убедитесь». :) Я думаю, вы слишком усложняете вещи. (И IOError проглатывается, поэтому ваш метод никогда не сгенерирует это.)
Показать ещё 2 комментария
1

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

  • 0
    привет, Senthil, спасибо за ваш ценный вклад. Я возьму ссылку на это.
0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню