Если вы используете Python> = 3.3, вы можете просто превратить тестовую папку в пакет, добавив в нее модуль __init__.py
.Затем в этом __init__.py
(и только там) вы добавляете путь родительского пакета к sys.path
.Это, если достаточно для unittest, обнаружить, чтобы использовать его для всех модулей в tests
.
Мой один просто:
import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
Тогда, если вам нужно получить доступ к classes.py
от одного изтестовые модули, вы можете просто использовать:
from sample import classes
или напрямую импортировать MyClass
:
from sample.classes import MyClass
Это просто работает, потому что sample уже является пакетом, а его родительская папка имеетдобавлен в sys.path
, когда python unittest
загрузил пакет test
.
Конечно, это работает только в том случае, если ваши тесты находятся в пакете.Если по какой-либо причине это невозможно, например, потому что вам нужно запускать тестовые модули по отдельности, то вы должны поместить модификацию sys.path
непосредственно во все тестовые файлы.
Записать файл path_helper.pyв папке тестов:
import os
import sys
core_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
if core_path not in sys.path: # don't add it if it is already here
sys.path.append(core_path)
Затем вы можете импортировать его во все тестовые файлы:
import path_helper
...