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
¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top