Почему носовые тесты не могут найти элементы в sys.path?

У меня есть серия модульных тестов, которые я запускаю с помощью nose. Для некоторых моих тестов я хотел бы удалить путь модуля из sys.path, чтобы не было конфликта с тем, что я тестирую.

sys.path.remove('/path/to/remove/from/sys/path')

Если я запущу интерпретатор Python и вызову sys.path, '/path/to/remove/from/sys/path' появится в списке. Однако, как только вызывается тестоносец, приведенный выше код не может его найти и выдает ошибку «не найден в списке».

Почему нос не может найти путь в sys.path?


person Matt Norris    schedule 16.10.2010    source источник


Ответы (2)


Вы не это имели в виду?

sys.path.remove('/path/to/remove/from/sys/path')

Если нос не может найти его в sys.path, значит, его там не было... нос сам много возится с sys.path. Почему бы не напечатать sys.path и посмотреть, что это на самом деле, если запустить его под носом?

person Nick Craig-Wood    schedule 16.10.2010
comment
Спасибо, что поймали это. Я отредактировал вопрос. Я также напечатал несколько итераций тестирования в Nose и Eclipse, но не увидел закономерности, когда определенные пути включались или исключались. Прямо сейчас я создал простой скрипт для установки PYTHONPATH перед запуском носовых тестов. - person Matt Norris; 17.10.2010

Создайте скрипт get_mod_py_path.py, чтобы установить PYTHONPATH. В этом случае он отбрасывает конфликтующий путь.

import os
import sys

# Remove the global Python modules from the PYTHONPATH.
path = os.environ['PYTHONPATH'].split(os.pathsep)
if os.environ['GLOB_PY_MODULES'] in path: 
    path.remove(os.environ['GLOB_PY_MODULES'])

# Construct the new path and print it. 
path = ':'.join(path)
print path

Затем используйте его в bash, который вызывает носовые тесты.

PYTHONPATH=`python get_mod_py_path.py`   
nosetests --verbosity=1 --with-gae --where="../tests/unit" --gae-application="../app" 
person Matt Norris    schedule 28.10.2010