2010-07-01 19 views
10

Je ne suis pas sûr de savoir comment faire fonctionner le handler __main__ du module de nez. J'ai cela à la fin de mon module de test:Y at-il un moyen de faire fonctionner le module de nez de python dans __main__ et sur la ligne de commande?

if __name__ == "__main__": 
    import nose 
    nose.main() 

Ce qui me donne:

---------------------------------------------------------------------- 
Ran 0 tests in 0.002s 

OK 

mais je lance la même chose via la ligne de commande, il trouve les essais et les exécute:

MacBook-Pro:Storage_t meloam$nosetests FileManager_t.py 
............E.. 
====================================================================== 
ERROR: testStageOutMgrWrapperRealCopy (WMCore_t.Storage_t.FileManager_t.TestFileManager) 
---------------------------------------------------------------------- 

SNIP

---------------------------------------------------------------------- 
Ran 15 tests in 0.082s 

FAILED (errors=1) 

J'ai joué avec passer des arguments différents à nose.main() mais je ne trouve rien qui fonctionne. Est-ce que je manque quelque chose de vraiment évident?

Merci

Répondre

9

Pour l'amour de la postérité, ce que j'utilise:

if __name__ == '__main__': 
    import nose 
    nose.run(argv=[__file__, '--with-doctest', '-vv']) 

Le --with-doctests exécutera également vos doctests dans le même fichier.

+0

Bizarrement, je ne peux pas courir tout cela de Aquamacs. Aquamacs ne définit pas la variable __file__ pour le fichier temporaire dans lequel il écrit le tampon. –

+0

Donner le nez au nom de fichier est intelligent. Je recevais des erreurs bizarres comme si j'essayais d'interpréter la fonction en tant que nom de module. –

+0

Cela semble fonctionnellement équivalent à 'nose.runmodule (argv = ['nose', '--with-doctest', '-vv'])' – MarkHu

0

Vous devez utiliser nose.core.TestProgram directement en le faisant passer de faux arguments de ligne de commande. Que je ne suis pas sûr que si va trouver vos tests du même module que vous utilisez

7
if __name__ == '__main__': 
    import nose 
    nose.run(defaultTest=__name__) 
1

Je recommande de vérifier 2 choses:

Vérifiez que la source FICHIERS suivre la convention de nommage appropriée : (détaillé dans ce answer). Par exemple, j'ai dû ajouter "_Test" à tous mes fichiers source. Ensuite, tout ce que vous avez besoin est cet argument (en supposant que votre principal est à la base des essais):

nose.main(defaultTest="") 

J'ai essayé avec:

nose.run(defaultTest=__name__) 

comme réponse précédente a suggéré, mais pour une raison ça ne fonctionnait pas pour moi. Je devais faire les deux choses pour le faire fonctionner!

Espérons que ça aide.

EDIT: Soit dit en passant, appeler avec

nose.run() 

ou

nose.main() 

fait pas de différence soit perceptible.

6

nose.runmodule est le chemin à parcourir:

if __name__ == '__main__': 
    import nose 
    nose.runmodule()