web-dev-qa-db-fra.com

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. Ceux-ci me donnent des erreurs "Aucun test de ce type" lorsqu'ils sont exécutés dans le même PWD:

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

Qu'est-ce qui pourrait mal ici?

90
opstastic

Vous devez le spécifier comme ceci: nosetests <file>:<Test_Case>.<test_method>, ou

nosetests test_web.py:TestWeb.test_checkout

Voir les documents

133
Will

Vous pouvez également spécifier un module:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users
16
michaeljoseph

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

Je définis wipd ("décorateur de travaux en cours") comme ceci:

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

Cela définit un décorateur @wipd qui définira l'attribut wip sur les objets 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 limiter l'exécution du test à celles marquées par @wipd.

Remarque 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

Le import fera du wip décorateur un membre de la classe , et tous les tests de la classe seront sélectionnés. Le plugin attrib vérifie la classe parente d'une méthode de test pour voir si l'attribut sélectionné existe là aussi, et les attributs qui sont créés et testés par attrib n'existent pas dans un espace séparé. Donc, si vous testez avec -a foo et votre classe contient foo = "platypus", alors tous les tests de la classe seront sélectionnés par le plugin.

11
Louis

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

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

Dans mes tests, la spécification 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 nose==1.3.7

0
surfer190