twisted trial unittest получает ImportError
Вопрос
Я пытаюсь написать несколько тестов unittest с использованием trial для моего приложения twisted, Я написал свой первый "пустой" пробный класс unittest, но когда я пытаюсь его запустить, я получаю ImportError для импорта моего модуля приложения.
Я подозреваю, что это связано с тем, что пробная версия изменяет текущий рабочий каталог и когда я пытаюсь импортировать свой модуль с классом object, который я хочу unittestировать это завершается неудачей.
Я храню модули своего приложения в одном каталоге, который я настроил сам, его нет ни в одном каталоге из PYTHONPATH или других известных, в моем приложении модули импортируют другие модули, поскольку все они находятся в одном каталоге.
Код выглядит примерно так:
from twisted.trial import unittest
from twisted.spread import pb
from twisted.internet import reactor, protocol
from MyModule import MyTestSubject
class MyTestSubjectTest(unittest.TestCase):
def setUp(self):
print('\nset up')
def test_startConsoleServer(self):
ts = MyTestSubject()
.... # here goes the body of the test
def tearDown(self):
print('\ntear down')
Итак, сообщение об ошибке выглядит следующим образом:
исключения.Ошибка импорта:Нет модуля с именем MyModule
Возможно, это не стандартный способ использования пробной версии или развертывания приложения на python.
Обновить:Я только что придумал обходной путь для этого, просто добавьте каталог приложения в sys.path таким образом, часть импорта будет выглядеть следующим образом:
from twisted.trial import unittest
from twisted.spread import pb
from twisted.internet import reactor, protocol
import sys, os; sys.path.append(os.path.abspath(os.path.curdir))
from MyModule import MyTestSubject
Решение
Как организованы ваши модули / пакеты?Возможно, попробуйте структуру, подобную следующей, тогда вам не нужно будет выполнять никакой взлом пути:
$ ls -R mypackage
mypackage:
__init__.py __init__.pyc mymodule.py mymodule.pyc test
mypackage/test:
__init__.py __init__.pyc test_mymodule.py test_mymodule.pyc
запускайте тесты чуть выше каталога пакетов mypackage:
$ trial mypackage
mypackage.test.test_mymodule
MyModuleTestCase
test_something ... [OK]
-------------------------------------------------------------------------------
Ran 1 tests in 0.002s
PASSED (successes=1)
внутренний файл test_mymodule.py:
from twisted.trial import unittest
from mypackage.mymodule import MyTestSubject
class MyModuleTestCase(unittest.TestCase):
def test_something(self):
pass