unitaire - unittest python 3




Quelle est la différence entre setUp() et setUpClass() dans Python unittest? (2)

Quelle est la différence entre setUp() et setUpClass() dans le framework Python unittest ? Pourquoi la configuration serait-elle gérée d'une méthode à l'autre?

Je veux comprendre quelle partie de l'installation est effectuée dans les fonctions setUp() et setUpClass() , ainsi qu'avec tearDown() et tearDownClass() .


Après avoir lu la question et la réponse acceptée, je pense qu’un supplément peut être ajouté.

Q: Pourquoi la configuration serait-elle gérée de l'une à l'autre?
R: C'est parce que la méthode de test peut nécessiter des préliminaires et que ceux-ci varient d'une méthode de test à l'autre.

Par exemple, prenez le code ci-dessous à partir de https://www.tutorialspoint.com/unittest_framework/unittest_framework_api.htm comme exemple:

import unittest

class simpleTest2(unittest.TestCase):
   def setUp(self):
      self.a = 10
      self.b = 20
      name = self.shortDescription()
      if name == "add":
         self.a = 10
         self.b = 20
         print name, self.a, self.b
      if name == "sub":
         self.a = 50
         self.b = 60
         print name, self.a, self.b
   def tearDown(self):
      print '\nend of test',self.shortDescription()

   def testadd(self):
      """add"""
      result = self.a+self.b
      self.assertTrue(result == 30)
   def testsub(self):
      """sub"""
      result = self.a-self.b
      self.assertTrue(result == -10)

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

La méthode testadd et testsub nécessite une entrée différente et nous pouvons définir la valeur de l'entrée respectivement dans la méthode setUp .


La différence se manifeste lorsque vous avez plus d'une méthode de test dans votre classe. setUpClass et tearDownClass sont exécutés une fois pour toute la classe; setUp et tearDown sont exécutés avant et après chaque méthode de test.

Par exemple:

class Example(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("setUpClass")

    def setUp(self):
        print("setUp")

    def test1(self):
        print("test1")

    def test2(self):
        print("test2")

    def tearDown(self):
        print("tearDown")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

Lorsque vous exécutez ce test, il affiche:

setUpClass
setUp
test1
tearDown
.setUp
test2
tearDown
.tearDownClass

(Les points ( . ) Sont la sortie par défaut de unittest quand un test réussit.) setUp que setUp et tearDown apparaissent avant et après test1 et test2 , alors que setUpClass et tearDownClass apparaissent une seule fois, au début et à la fin du setUpClass test.





python-unittest