Quelle est la différence entre setUp()
et setUpClass()
dans le unittest
framework Python ? Pourquoi la configuration serait-elle gérée d'une manière plutôt que d'une autre?
Je veux comprendre quelle partie de la configuration est effectuée dans les fonctions setUp()
et setUpClass()
, ainsi qu'avec tearDown()
et tearDownClass()
.
unittest
ne considère pas qu'un test a réussi tant qu'il netearDown
s'est pas terminé sans incident.setUp
ettearDown
sont chacun exécutés une fois pour chaquetest
méthode (donc deux fois au total dans cet exemple) maissetUpClass
ettearDownClass
sont exécutés une seule fois chacun.Quelle est la différence entre
setUp()
etsetUpClass()
dans leunittest
framework Python ?La principale différence (comme indiqué dans la réponse de Benjamin Hodgson) est qu'elle
setUpClass
n'est appelée qu'une seule fois et c'est avant tous les tests, alors qu'ellesetUp
est appelée immédiatement avant chaque test. (NB: la même chose s'applique aux méthodes équivalentes dans d'autres frameworks de test xUnit, pas seulement à Pythonunittest
.)De la
unittest
documentation :et:
Pourquoi la configuration serait-elle gérée d'une manière plutôt que d'une autre?
Cette partie de la question n'a pas encore reçu de réponse. Selon mon commentaire en réponse à la réponse de Gearon, la
setUp
méthode est destinée aux éléments du montage qui sont communs à tous les tests (pour éviter de dupliquer ce code dans chaque test). Je trouve que cela est souvent utile car la suppression de la duplication (généralement) améliore la lisibilité et réduit la charge de maintenance.La
setUpClass
méthode est pour les éléments coûteux que vous préférez ne faire qu'une seule fois, comme l'ouverture d'une connexion à une base de données, l'ouverture d'un fichier temporaire sur le système de fichiers, le chargement d'une bibliothèque partagée pour les tests, etc. Faire de telles choses avant chaque test ralentirait le suite de tests trop, donc nous le faisons juste une fois avant tous les tests. Il s'agit d'une légère dégradation de l'indépendance des tests mais d'une optimisation nécessaire dans certaines situations. On ne devrait sans doute pas faire de telles choses dans les tests unitaires car il est généralement possible de se moquer de la base de données / système de fichiers / bibliothèque / quoi que ce soit sans utiliser la chose réelle. En tant que tel, je trouve quesetUpClass
c'est rarement nécessaire. Cependant, il est utile lorsque le test des exemples ci-dessus (ou similaire) devient nécessaire.la source