Maison >développement back-end >Tutoriel Python >Comment puis-je implémenter des tests unitaires dynamiques avec paramétrage en Python ?

Comment puis-je implémenter des tests unitaires dynamiques avec paramétrage en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-23 20:52:13879parcourir

How Can I Implement Dynamic Unit Testing with Parameterization in Python?

Tests unitaires dynamiques en Python avec paramétrage

Introduction

La paramétrisation est une technique en unité testing qui automatise la création de tests avec différents ensembles de données d'entrée. Cela permet aux développeurs de tester minutieusement leur code avec divers scénarios, garantissant sa robustesse et sa fiabilité.

Paramétrage avec le décorateur de pytest

Une option populaire de paramétrage consiste à utiliser le décorateur de pytest. Ajoutez simplement le décorateur @parametrize à votre classe de test, suivi d'une liste de valeurs comme suit :

from pytest import mark

class TestSequence(unittest.TestCase):

    @mark.parametrize(
        ["name", "a", "b"],
        [
            ["foo", "a", "a"],
            ["bar", "a", "b"],
            ["lee", "b", "b"],
        ]
    )
    def test_sequence(self, name, a, b):
        self.assertEqual(a, b)

Ce décorateur générera automatiquement un test distinct pour chaque ensemble de valeurs de la liste.

Paramétrage avec bibliothèque paramétrée

Une autre option consiste à utiliser la bibliothèque paramétrée. Voici à quoi ressemblerait le même test en utilisant cette bibliothèque :

from parameterized import parameterized

class TestSequence(unittest.TestCase):

    @parameterized.expand([
        ["foo", "a", "a"],
        ["bar", "a", "b"],
        ["lee", "b", "b"],
    ])
    def test_sequence(self, name, a, b):
        self.assertEqual(a, b)

Dans les deux cas, le résultat est le même : plusieurs tests sont générés en fonction des données fournies, vous permettant de tester votre code en profondeur.

Approche originale de paramétrage

Bien que les méthodes décrites ci-dessus soient modernes et largement utilisées, il existait une approche plus ancienne qui générait des tests méthodes de manière dynamique. Cependant, cette approche n'est plus couramment utilisée et n'est évoquée que pour des raisons historiques :

import unittest

l = [["foo", "a", "a",], ["bar", "a", "b"], ["lee", "b", "b"]]

class TestSequense(unittest.TestCase):
    pass

def test_generator(a, b):
    def test(self):
        self.assertEqual(a,b)
    return test

if __name__ == '__main__':
    for t in l:
        test_name = 'test_%s' % t[0]
        test = test_generator(t[1], t[2])
        setattr(TestSequense, test_name, test)
    unittest.main()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn