web-dev-qa-db-fra.com

Expliquez les méthodes "setUp" et "tearDown" Python utilisées dans les cas de test

Quelqu'un peut-il expliquer l'utilisation des méthodes setUp et tearDown de Python lors de l'écriture de scénarios de test en dehors de cela setUp est appelé immédiatement avant d'appeler la méthode de test et tearDown est appelé immédiatement après avoir été appelé?

73
NOOB

En général, vous ajoutez toutes les étapes prérequises pour configurer et toutes les étapes de nettoyage pour tearDown.

Vous pouvez en lire plus avec des exemples ici .

Lorsqu'une méthode setUp () est définie, le lanceur de test l'exécutera avant chaque test. De même, si une méthode tearDown () est définie, le lanceur de test l'invoquera après chaque test.

Par exemple, vous avez un test qui requiert l'existence d'éléments ou d'un certain état. Vous devez donc placer ces actions (création d'instances d'objet, initialisation de la base de données, préparation de règles, etc.) dans setUp.

De plus, comme vous le savez, chaque test doit s’arrêter à l’endroit où il a été démarré - cela signifie que nous devons restaurer l’état initial de l’application - par exemple, fermer des fichiers, établir des connexions, supprimer des éléments nouvellement créés, rappeler des transactions appelantes, etc. les marches doivent être incluses dans la structure en creux.

L'idée est donc que le test lui-même ne devrait contenir que des actions à exécuter sur l'objet de test pour obtenir le résultat, tandis que setUp et tearDown sont les méthodes qui vous permettent de laisser votre code de test propre et flexible.

Vous pouvez créer un setUp et un tearDown pour un ensemble de tests et les définir dans une classe parente. Vous pourrez ainsi prendre en charge de tels tests et mettre à jour les préparations et nettoyages courants.

Si vous recherchez un exemple simple, veuillez tilisez le lien suivant avec l'exemple

68
Artsiom Rudzenka

Vous pouvez les utiliser pour factoriser le code commun à tous les tests de la suite de tests.

Si vous avez beaucoup de code répété dans vos tests, vous pouvez les raccourcir en déplaçant ce code dans setUp/tearDown.

Vous pouvez l’utiliser pour créer des données de test (par exemple, configurer des faux ou des faux) ou pour supprimer des fonctions avec des faux.

Si vous effectuez des tests d'intégration, vous pouvez utiliser les conditions préalables d'environnement de vérification dans setUp et ignorer le test si quelque chose n'est pas configuré correctement.

Par exemple:

class TurretTest(unittest.TestCase):

    def setUp(self):
        self.turret_factory = TurretFactory()
        self.turret = self.turret_factory.CreateTurret()

    def test_turret_is_on_by_default(self):
        self.assertEquals(True, self.turret.is_on())

    def test_turret_turns_can_be_turned_off(self):
        self.turret.turn_off()
        self.assertEquals(False, self.turret.is_on())
44
Matt Curtis

Supposons que vous ayez une suite avec 10 tests. 8 des tests partagent le même code d'installation/de démontage. Les 2 autres non.

l’installation et le démontage vous offrent un bon moyen de refactoriser ces 8 tests. Maintenant que faites-vous avec les 2 autres tests? Vous les déplaceriez dans un autre test/suite. Donc, utiliser la configuration et le démontage aide également à donner un moyen naturel de diviser les tests en cas/suites

7
John La Rooy