импорт родительского каталога приложения движка приложения для unittest - PullRequest
0 голосов
/ 16 сентября 2011

Я уверен, что это легко решить, но я так долго на него смотрю, что смотрю прямо мимо решения.Любые советы / советы / предложения / решения приветствуются!

Я пытаюсь добавить несколько юнит-тестов в приложение для своего движка приложений.Я использую пример 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/

Есть предложения, что мне здесь не хватает?

1 Ответ

2 голосов
/ 16 сентября 2011

Вы пытались использовать абсолютный путь?

sys.path.append(os.path.abspath(os.path.dirname(test_path)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...