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.