Я уверен, что это легко решить, но я так долго на него смотрю, что смотрю прямо мимо решения.Любые советы / советы / предложения / решения приветствуются!
Я пытаюсь добавить несколько юнит-тестов в приложение для своего движка приложений.Я использую пример testrunner.py из http://code.google.com/appengine/docs/python/tools/localunittesting.html (внизу страницы).Это прекрасно работает, если я помещаю файл unittest (с именем 'test_lib.py') в корень приложения (myapp), однако я хочу переместить тесты в отдельный подкаталог (с именем 'tests') внутри приложения.Теперь мне нужно импортировать некоторые из модулей из приложения, однако, поскольку рабочий каталог файла unittest теперь на один уровень глубже, он не видит фактические модули из моего приложения механизма приложений.
Я попытался добавить__ init__.py к тестам и добавил в него следующий код:
import os
import sys
sys.path.append(os.path.dirname(os.getcwd()))
Я надеялся, что это найдет текущий рабочий каталог и поднимется на один уровень вверх, добавит его в sys.path и изчто я мог бы импортировать 'util.lib' в файл unittest ('test_lib.py').Однако, когда я запускаю testrunner.py, я все еще получаю ошибку «ImportError: Нет модуля с именем util.lib» -> Я пытаюсь здесь импортировать модуль с именем lib в подкаталог с именем util внутри корня «myapp».Моя структура каталогов выглядит следующим образом:
testrunner.py
|- myapp
|- __init__.py
|- util
|- __init__.py
|- lib.py
|- tests
|- __init__.py ## this file has the import mentioned above.
|- test_lib.py
Я также пытался добавить импорт корневого каталога приложения в testrunner, но это возвращает ту же ошибку.
def main(sdk_path, test_path):
sys.path.append(os.path.dirname(test_path)) ## This line I added to the testrunner.
sys.path.insert(0, sdk_path)
import dev_appserver
dev_appserver.fix_sys_path()
suite = unittest2.loader.TestLoader().discover(test_path)
unittest2.TextTestRunner(verbosity=2).run(suite)
И явызов теста с помощью следующей команды:
./testrunner.py ~/sdk/google_appengine/ myapp/tests/
Есть предложения, что мне здесь не хватает?