2013-07-18 2 views
10
myproject/ 
    bin/ 
     myscript 
    mypackage/ 
     __init__.py 
     core.py 
     tests/ 
      __init__.py 
      test_mypackage.py 
    setup.py 

Каков наилучший способ проверить скрипт myscript?Тестирование python пакет bin сценарии лучшая практика

Из SO исследований, кажется, единственный ответ, который я нашел, чтобы написать тест в тестах называемых test_myscript и использовать что-то вроде

import subprocess 

process = subprocess.Popen('myscript arg1 arg2') 
print process.communicate() 

в моем тесте, чтобы запустить сценарий, а затем проверить результаты , Есть ли способ лучше? Или любые другие предложения по-разному? И должен ли я поместить тестовый набор в bin/tests или в mypackage/tests?

+0

Должны ли проекты, созданные из них, проверять их? – dm03514

+1

Если не проект, из которого выполнен скрипт, то что нужно проверить скрипт? – vovel

ответ

1

Я не верю, что есть какие-либо «лучшие практики» о том, где положить tests. Посмотрите, как много разных мнений есть: Where do the Python unit tests go?

я лично один и только tests каталог на верхнем уровне, рядом с вашими bin и mypackage каталогов - как, например, django имеет.

Для запуска вашего bin сценарий и получить результаты, которые вы можете использовать:

  • подпроцесс (как вы упомянули), но с использованием check_output:

    import subprocess 
    output = subprocess.check_output("cat /etc/services", shell=True) 
    
  • scripttest module

    • был разработан для test command-line scripts - look s как инструмент для работы
    • также увидеть это article
  • cli и это cli.test модуль (не когда-либо использовал лично)

Надежда, что помогает.

+0

Если скрипт не создает вывод, а вместо этого изменяет базу данных, то что? Обычно я использую инъекцию зависимостей для изменения базы данных в тестовую базу данных, созданную в setUp. Есть ли способ, которым я могу использовать относительный импорт для импорта сценария, затем сделать инъекцию зависимостей, а затем запустить main (args)? Тестирование вывода - это легкая часть, предполагающая, что она работает с тестовой базой данных. В идеале я хотел бы продолжать использовать инъекцию зависимостей. – vovel

Смежные вопросы