2017-05-12 2 views
2

J'ai un grand fichier de test python utilisant unittest que je lance à partir de la ligne de commande. Certains tests prennent du temps à s'exécuter. C'est un point de douleur léger parce que je suis souvent seulement concerné par le dernier test que j'ai ajouté. Ce que je veux est ceci:Python unittest, exécutant uniquement les tests qui ont échoué

  1. ajouter le test.
  2. exécuter des tests (un échec parce que je ne l'ai pas écrit le code pour le faire passer)
  3. mettre en œuvre le comportement
  4. run seul le test qui a échoué la dernière fois
  5. corriger l'erreur stupide que j'ai fait lors de la mise en œuvre du
  6. exécutez uniquement le test d'échec, qui passe cette fois
  7. exécutez tous les tests pour savoir ce que j'ai cassé.

Est-il possible de le faire à partir de la ligne de commande?

+0

Briser vos tests unitaires dans des fichiers séparés résoudrait vos problèmes les plus probables. –

+0

Comment cela fonctionnerait-il? J'ai encore besoin de python pour savoir quels fichiers ont fonctionné et lesquels ne l'ont pas ... – Joe

Répondre

1

Chaque fonction de test est déclarée comme:

def test_something_something(self): 

Si vous ajoutez un trait de soulignement en face, comme:

def _test_something_something(self): 

ce test sera ignoré. Une chose que vous pouvez faire est de faire un rapide find and replace in vim. Trouvez tous les "test_" et remplacez-les par "_test_", puis trouvez le test qui a échoué et supprimez le trait de soulignement.

1

(pas une solution entièrement automatisée, mais mieux que l'existant)

Si vous passez le nom d'une classe d'essai comme argument du script de test, ce test ne sera exécuté. Par exemple, si vous ne voulez exécuter des tests dans la classe MyTest dans le script test_whatever.py:

python3 test_whatever.py MyTest 

Vous pouvez également spécifier un test individuel en tant que membre de cette classe. Par exemple, supposons que vous voulez exécuter le test test_something dans la classe MyTest:

python3 test_whatever.py MyTest.test_something 
+0

Upvoted parce que cela me fait le plus de chemin - restera ouvert pour le moment au cas où quelqu'un aurait une chose très pratique que nous n'avons pas encore vue :) – Joe