2011-01-21 5 views
20

Мои исходные файлы находятся под src, а тестовые файлы находятся в тестах. Когда я хочу запустить тестовый файл, скажем, python myTest.py, я получаю ошибку импорта: «Нет модуля с именем ASourceModule.py».Python import src modules при запуске тестов

Как импортировать все модули из источника, необходимого для запуска моих тестов?

+1

Возможной дубликаты [Запуск UnitTest с типичной структурой каталогов тестов] (http://stackoverflow.com/questions/1896918/running-unittest-with- typ-test-directory-structure) – Asqiir

ответ

22

Вам нужно добавить этот каталог в пути:

import sys 
sys.path.append('../src') 

Возможно поместить это в модуль, если вы используете его много.

+0

Это не агностик. См. [Ответ] (https://stackoverflow.com/a/34938623/1509695) для работы с одним и тем же кодом как в Linux, так и в Windows. – matanster

0

Лучшее (наиболее управляемое) решение, похоже, использует virtualenv и setuptools/distribute для установки andebelopment-копии вашего пакета (src). Таким образом, ваши тесты выполняются с полностью «установленной» системой.

12

Если вы не хотите добавлять исходный путь к каждому тестовому файлу или изменять свой PYTHONPATH, вы можете использовать nose для запуска тестов.

Предположим, ваша структура каталогов выглядит так:

project 
    package 
     __init__.py 
     module.py 
    tests 
     __init__.py 
     test_module.py 

Вы должны импортировать модуль обычно в test_module.py (например from package import module). Затем запустите тесты, запустив nosetests в папке проекта. Вы также можете запустить определенные тесты, выполнив nosetests tests/test_module.py.

__init__.py в каталоге tests необходим, если вы хотите запустить тесты изнутри.

Вы можете установить нос легко с easy_install или pip:

easy_install nose 

или

pip install nose 

нос проходит UnitTest в много больше способов, чтобы узнать больше об этом вы можете проверить свой веб-сайт: https://nose.readthedocs.org/en/latest/

+0

+1 для «' __init __. Py' в каталоге тестов необходимо, если вы хотите запустить тесты изнутри ». –

3

В моей системе (Windows 10) я должен был сделать что-то вроде этого:

import sys 
import os 
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../src") 

прилагая относительный каталог непосредственно sys.path не работает

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