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
Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top