2010-09-22 8 views
5

Je fais unittests avec python. Je n'utilise aucune découverte de test automatique. J'assemble TestCases dans un TestSuite manuellement.Python unittest - invoque unittest.main() avec un TestSuite personnalisé

Je peux exécuter ces tests avec unittest.TextTestRunner().run(suite), je voudrais les exécuter avec unittest.main() afin que je puisse utiliser les options de ligne de commande (comme -v/--failfast). La documentation indique que unittest.main() peut prendre une option TestRunner. Comment convertir mon TestSuite en TestRunner?

+1

TestSuite et TestRunner n'ont rien à voir avec ** rien **. Une suite est une collection de tests. Un coureur exécute une collection de tests. Vous ne transformez pas l'un dans l'autre. Vous fournissez la suite au coureur (via 'unittest.main()', habituellement.) –

+0

Comment fournir une suite de tests à unittest.main()? Ou comment créer un TestRunner qui exécutera un TestSuite donné (que je peux passer à unittest.main()) – Rory

+1

Essayez-vous simplement de passer 'failfast' à votre TestRunner? Si vous lisez la source, une fonctionnalité non documentée de testrunner est qu'elle accepte le paramètre 'failfast'. –

Répondre

-2

Ne faites rien, sauf assurez-vous de l'avoir dans le module de test de votre unité.

if __name__ == '__main__': 
    unittest.main(failfast=True) 

http://docs.python.org/library/unittest.html#unittest.main

De la documentation ...

unittest.main(failfast=True, testRunner=unittest.TextTestRunner) 
+0

Je n'utilise pas l'autodiscovery de test d'unittest.main(), je suis la fabrication artisanale d'un TestSuite. Si j'utilise unittest.main comme vous le suggérez, il ne fonctionnera pas mes tests. J'ai essayé. – Rory

+0

Pourquoi la crampe à la main? Pourquoi ne pas autodiscover principal vos tests? Quelles sont vos superclasses de test? Quels sont vos noms de test? Cela fonctionne parfaitement pour moi. Que fais-tu de mal? –

+0

Je n'utilise pas autodiscover parce que je fais des TestCases basées sur des entrées valides connues pour une fonction. J'utilise cette approche http://stackoverflow.com/questions/2798956/python-unittest-generate-multiple-tests-programmatically/3772008#3772008 – Rory

2

Près de double How to run a testsuite with unittest.main (copier-coller-réponse):

Vous ne pouvez pas passer un TestSuite à principal, consultez le constructeur de unittest.main.TestProgram (qui était unittest.main est effectivement) et comment cette classe fonctionne. Le premier argument si quelque chose est le nom du module, pas une suite de tests. Prend en fait ses arguments de sys.argv, car il est en fait destiné à être utilisé à partir de la ligne de commande et non à partir d'un programme. C'est juste commun de le faire pour plus de commodité.

Questions connexes