#python #twisted #trial
#python #twisted #пробная версия
Вопрос:
Я пытаюсь написать несколько тестов unittest с использованием trial для моего приложения twisted, я написал свой первый «пустой» пробный класс unittest, но когда я пытаюсь его запустить, я получаю ImportError для импорта моего модуля приложения.
Я подозреваю, что это связано с тем, что trial изменяет текущий рабочий каталог, и когда я пытаюсь импортировать свой модуль с классом 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
Возможно, это не стандартный способ использования trial или развертывания приложения на 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
Комментарии:
1. Какова точная ошибка импорта? Что не импортируется?
2. Извините, забыл упомянуть об этом. MyModule не найден «исключения. Ошибка импорта: нет модуля с именем MyModule «, я только что нашел обходной путь для этого, я добавляю каталог, в котором я храню свое приложение, в sys.path
Ответ №1:
Как организованы ваши модули / пакеты? Возможно, попробуйте структуру, подобную следующей, тогда вам не нужно будет выполнять какой-либо путь взлома:
$ 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
Комментарии:
1. Спасибо, это работает, но родительский каталог, содержащий mypackage, должен находиться на PYTHONPATH, иначе mymodule не найден.
2. для полноты картины, можете ли вы показать мне точную строку, которую вы используете для запуска своих тестов, и текущий рабочий каталог, из которого вы его запускаете?
3. Текущий рабочий каталог был просто пользовательским каталогом в Linux, там находится каталог mypackage с файлами application *.py внутри, строка для запуска моих скриптов ранее была: trial test_mymodule. py и в Windows, которые я использовал c:Python27python.exe c:Python27Scriptstrial.py test_mymodule.py