Torce Trial Unittest Gets Importerror
Pregunta
Estoy tratando de escribir algunas Unittests usando la prueba para mi aplicación retorcida, escribí mi primera clase de prueba 'vacía' unitest, pero cuando intento ejecutarla, obtengo ImporterRor para importar mi módulo de aplicación.
Esto es como sospecho que porque la prueba cambia el directorio de trabajo actual y cuando intento importar mi módulo con la clase de objeto que quiero no es decir, falla.
Mantengo mis módulos de aplicación en un solo directorio que configuré por mí mismo, no está en ningún directorio de PythonPath o de lo contrario, en mi aplicación los módulos importan otros módulos, ya que todos están en el mismo dir.
El código se ve similar a esto:
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')
Entonces el mensaje de error se ve así:
Excepciones
Tal vez esta no es la forma estándar de usar prueba o implementación de una aplicación Python.
ACTUALIZACIÓN: Acabo de descubrir una solución para esto, solo agregue el directorio de aplicaciones al sys.path para que la parte de las importaciones se vea así:
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
Solución
¿Cómo se organizan sus módulos / paquetes? Tal vez pruebe una estructura como la siguiente, entonces no necesitará hacer ninguna piratería de ruta:
$ 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
Ejecute pruebas desde justo por encima del paquete de mypackage Dir:
$ trial mypackage
mypackage.test.test_mymodule
MyModuleTestCase
test_something ... [OK]
-------------------------------------------------------------------------------
Ran 1 tests in 0.002s
PASSED (successes=1)
File Inside test_mymodule.py:
from twisted.trial import unittest
from mypackage.mymodule import MyTestSubject
class MyModuleTestCase(unittest.TestCase):
def test_something(self):
pass