Comment spécifier un seul test dans un fichier avec nosetests?

J’ai un fichier appelé test_web.py contenant une classe TestWeb et de nombreuses méthodes nommées comme test_something ().

Je peux exécuter tous les tests de la classe comme suit:

$ nosetests test_web.py ... ====================================================================== FAIL: checkout test ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/me/path/here/test_web.py", line 187, in test_checkout ... 

Mais je n’arrive pas à exécuter des tests individuels. Celles-ci me donnent des erreurs «pas de tel test» lorsqu’elles sont exécutées dans le même PWD:

 $ nosetests test_web.py:test_checkout $ nosetests TestWeb:test_checkout 

Qu’est-ce qui pourrait être faux ici?

Vous devez le spécifier ainsi: nosetests :. , ou

 nosetests test_web.py:TestWeb.test_checkout 

Voir les docs

Vous pouvez également spécifier un module:

 nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users 

Spécifier des noms sur la ligne de commande comme les autres réponses suggèrent que cela fonctionne et est utile. Cependant, lorsque je suis en train d’écrire des tests, je trouve souvent que je veux juste exécuter le test sur lequel je travaille et que les noms que je devrais écrire sur la ligne de commande sont assez longs et difficiles à écrire. . Dans ce cas, je préfère utiliser un décorateur et un drapeau personnalisés.

Je définis wipd (“work in progress decorator”) comme ceci:

 from nose.plugins.atsortingb import attr def wipd(f): return attr('wip')(f) 

Cela définit un décorateur @wipd qui définira l’atsortingbut wip sur les objects qu’il décore. Par exemple:

 import unittest class Test(unittest.TestCase): @wipd def test_something(self): pass 

Ensuite, -a wip peut être utilisé sur la ligne de commande pour restreindre l’exécution du test à ceux marqués avec @wipd .

Note sur les noms …

J’utilise le nom @wipd pour le décorateur plutôt que @wip pour éviter ce genre de problème:

 import unittest class Test(unittest.TestCase): from mymodule import wip @wip def test_something(self): pass def test_something_else(self): pass 

L’ import fera du décorateur wip un membre de la classe et tous les tests de la classe seront sélectionnés. Le plugin atsortingb vérifie la classe parente d’une méthode de test pour voir si l’atsortingbut sélectionné existe également, et les atsortingbuts créés et testés par atsortingb n’existent pas dans un espace séparé. Donc si vous testez avec -a foo et que votre classe contient foo = "platypus" , alors tous les tests de la classe seront sélectionnés par le plugin.

Pour exécuter plusieurs tests spécifiques, vous pouvez simplement les append à la ligne de commande, séparés par un espace.

 nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout 

Dans mes tests, spécifier des tests avec des noms de module ne fonctionne pas

Vous devez spécifier le chemin réel vers le .py :

 nosetests /path/to/test/file.py:test_function 

Ceci avec le nose==1.3.7