unittest d'essai torsadé obtient ImportError
Question
Je suis en train d'écrire des tests unitaires à l'aide d'essai pour mon application tordue, J'ai écrit mon premier « vide » essai unittest classe, mais lorsque je tente de l'exécuter je reçois ImportError pour importer mon module d'application.
Ceci est comme je le soupçonne, car essai change le répertoire de travail courant et quand je tente d'importer mon module avec la classe d'objets que je veux unittest elle échoue.
Je garde mes modules d'application dans un seul répertoire que je mis en place par moi-même, ce n'est pas dans un répertoire de PYTHONPATH ou bien connu, dans mon application les modules d'importation d'autres modules, car ils sont tous dans le même répertoire.
Le look de code similaire à ceci:
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')
Ainsi, les regards msg d'erreur comme celui-ci:
exceptions.ImportError: Aucun module nommé MyModule
Peut-être que ce n'est pas la manière standard d'utiliser un procès ou le déploiement d'une application python.
Mise à jour: Je viens de comprendre une solution de contournement pour cela, ajoutez juste le répertoire de l'application à sys.path de sorte que la partie des importations ressemblera à ceci:
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
La solution
Comment sont vos modules / packages organisés? Peut-être essayer une structure comme celle-ci, vous aurez pas besoin de faire tout chemin carriole:
$ 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
effectuer des tests de juste au-dessus du paquet myPackage dir:
$ trial mypackage
mypackage.test.test_mymodule
MyModuleTestCase
test_something ... [OK]
-------------------------------------------------------------------------------
Ran 1 tests in 0.002s
PASSED (successes=1)
fichier à l'intérieur test_mymodule.py:
from twisted.trial import unittest
from mypackage.mymodule import MyTestSubject
class MyModuleTestCase(unittest.TestCase):
def test_something(self):
pass