86 votes

Ordre d'exécution de Python unittest.TestCase

Est-il possible en Python unittest pour définir l'ordre dans lequel les cas de test sont exécutés?

Dans mon TestCase classe, certains cas de tests ont des effets secondaires qui créé les conditions pour que les autres pour fonctionner correctement. Maintenant, je réalise que la bonne façon de le faire est d'utiliser setUp() de faire tous les réglages aux choses, mais je tiens à mettre en œuvre une conception où chacune des versions de test un peu plus de l'état que la prochaine pouvez utiliser. Je trouve cela beaucoup plus élégant.

class MyTest(TestCase):
  def test_setup(self):
   #do something
  def test_thing(self)
   #do something that depends on test_setup()

Idéalement, je voudrais les tests à exécuter dans l'ordre où ils apparaissent dans la classe. Il semble qu'ils s'exécutent dans l'ordre alphabétique.

78voto

ncoghlan Points 10779

Ne faites pas d'eux des tests indépendants - si vous voulez un test monolithique, écrivez un test monolithique.

 class Monolithic(TestCase):
  def step1(self):
      ...

  def step2(self):
      ...

  def steps(self):
    for name in sorted(dir(self)):
      if name.startswith("step"):
        yield name, getattr(self, name) 

  def test_steps(self):
    for name, step in self.steps():
      try:
        step()
      except Exception as e:
        self.fail("{} failed ({}: {})".format(step, type(e), e)
 

48voto

varun Points 1446

C'est une bonne pratique de toujours écrire un monolithique test pour de telles attentes, cependant si yer un dingo mec comme moi, alors vous pouvez simplement écrire laide à la recherche de méthodes dans l'ordre alphabétique, de sorte qu'ils sont classés de a à b, comme indiqué dans les docs python http://docs.python.org/library/unittest.html

Notez que l'ordre dans lequel les différents cas de test sera exécuté est déterminé par le tri de la fonction de test de noms à l'égard de la intégré dans la commande pour les chaînes

EXEMPLE:

  def test_a_first():
  print "1"
  def test_b_next(): 
  print "2" 
  def test_c_last(): 
  print "3"

26voto

KennyTM Points 232647

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

Notez que l'ordre dans lequel les différents cas de test seront exécutés est déterminé en triant les noms des fonctions de test en fonction du classement intégré des chaînes.

Assurez-vous simplement que le nom de test_setup a la plus petite valeur de chaîne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X