2012-07-31 1 views
1

J'ai une classe Foo qui vit dans Src/Projects/SomeProject/Foo.py« TypeError: objet « module » est pas appelable » lors de l'exécution avec py.test sous dossier/test

J'ai une classe FooTest(unittest.TestCase) qui vit dans:

Src/Projects/SomeProject/tests/FooTest.py 

Quand je lance avec pytest (je viens de taper 'py.test' à Src pour exécuter tous les tests), je reçois:

def setUp(self): 
    self.foo = Foo() 
    TypeError: 'module' object is not callable 

(je from Foo import Foo en FooTest.py et Foo.py est en sys.path.

Mais quand je le lance avec python. python Src/Projects/SomeProject/tests/FooTest.py tout fonctionne)

De plus, si je déménage juste FooTest.py à Src/Projects/SomeProject en cours d'exécution puis avec py.test fonctionne soudainement.

Des idées?

Répondre

1

Vous devez vérifier votre chemin python; un autre Foo.Foo se trouve avant votre module Foo.

Alternativement, dans un try/except TypeError la suite, imprimez le chemin du module incriminé:

def setUp(self): 
    try: 
     self.foo = Foo() 
    except TypeError: 
     # What module Foo is this? 
     print Foo.__file__ 
     raise 
+0

Eh bien, j'ai résolu le problème en renommant Foo.py en FooComponent.py; Je pense que ce n'est pas que j'ai eu un autre Foo.Foo, c'est juste que le dossier du projet s'appelle aussi Foo, et ça a chamboulé les choses. (le fichier était dans Src/Projects/Foo/Foo.py) Une idée de pourquoi cela provoque l'erreur? –

+1

'Src/Projects' est probablement listé votre chemin python, précédant' Src/Projects/SomeProject'; vérifiez 'sys.path'. –

+0

Excellent - merci! –

0

J'utilise la même convention de dénomination, et j'ai eu le même problème. J'ai résolu en instanciant l'objet Foo en appelant self.foo = Foo.Foo()

Questions connexes