contorto unittest processo ottiene ImportError
Domanda
Sto cercando di scrivere alcuni Unittests utilizzando prova per la mia applicazione contorto, Ho scritto il mio primo processo 'vuoto' unittest classe, ma quando provo a farlo funzionare ottengo ImportError per importare il mio modulo app.
Questo è come sospetto a causa di prova cambia la directory di lavoro corrente e quando cerco di importare il mio modulo con la classe di oggetti che voglio unittest fallisce.
tengo i miei moduli applicativi in ??una singola directory che ho creato da solo, non è in una directory da PYTHONPATH altrimenti conosciuto, nella mia app moduli importare altri moduli in quanto tutti sono nella stessa dir.
Gli sguardi di codice formulazione similare a questo:
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')
gli sguardi msg di errore come questo:
exceptions.ImportError: No module named MyModule
Forse questo non è il modo standard di utilizzo di prova o la distribuzione di un'applicazione python.
UPDATE: Ho appena capito una soluzione per questo, basta aggiungere la directory app per sys.path così la parte importazioni sarà simile a questa:
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
Soluzione
Come sono organizzati i moduli / pacchetti? Forse provare una struttura come la seguente, quindi non sarà necessario fare qualsiasi aggiustamenti percorso:
$ 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
test eseguiti da appena sopra il dir pacchetto mypackage:
$ trial mypackage
mypackage.test.test_mymodule
MyModuleTestCase
test_something ... [OK]
-------------------------------------------------------------------------------
Ran 1 tests in 0.002s
PASSED (successes=1)
file test_mymodule.py interna:
from twisted.trial import unittest
from mypackage.mymodule import MyTestSubject
class MyModuleTestCase(unittest.TestCase):
def test_something(self):
pass