2013-11-29 5 views
2

Я работаю над проектом, где у меня есть система каталогов, которая выглядит следующим образом:Относительные импорт и модульное тестирование

tests/ 
    corpus/ 
     tests.py 
monkey/ 
    corpus/ 
     corpus.py 

setup.py 

У меня есть __init__.py «ю.ш., разбросанные на протяжении всех этих каталогов, а также.

Проблема в том, что когда я пытаюсь запустить corpus/tests.py, он жалуется на строку кода следующим образом: import monkey.corpus as corpus.

Он (понятно) работает при запуске с помощью переключателя -m из корневого каталога или имеет файл tests.py в корневом каталоге. Какой из этих двух (или, возможно, других вариантов) является наиболее предпочтительным, если я хочу автоматизировать несколько тестов?

ответ

1

Я бы поставил __init__ файл в уровне tests и monkey, и включить его в sys.path. Это явно более практично, так как вам не нужно указывать параметр каждый раз, когда вы его вызываете.

Кроме того, если кто-то будет использовать ваш код, obviouly они не ожидали бы указать -m рассуждение каждый раз, когда они бегут файл :)

Так, в __init__ файле корневого каталога:

root/ 
    /tests 
    /monkey 
    __init__.py 

Надеюсь, это поможет!

1

Если вы используете setuptools, вы можете указать набор тестов в вашем setup.py и запустить тесты с использованием python setup.py test

from setuptools import setup 

setup(
    ... 
    test_suite='tests' 
    ...) 

Другим способом запустить nosetests из nose пакета из корневого каталога ,

Примечание Файлы испытаний могут быть недоступны для обоих методов, упомянутых мной.

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