Wie kann ich dynamische Unit-Tests mit Parametrisierung in Python implementieren?

Linda Hamilton
Freigeben: 2024-11-23 20:52:13
Original
805 Leute haben es durchsucht

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

Dynamisches Unit-Testen in Python mit Parametrisierung

Einführung

Parametrisierung ist eine Technik in Unit Testen, das die Erstellung von Tests mit unterschiedlichen Eingabedatensätzen automatisiert. Dadurch können Entwickler ihren Code gründlich mit verschiedenen Szenarien testen und so seine Robustheit und Zuverlässigkeit sicherstellen.

Parametrisierung mit dem Decorator von Pytest

Eine beliebte Option zur Parametrisierung ist die Verwendung des Decorators von Pytest. Fügen Sie einfach den @parametrize-Dekorator zu Ihrer Testklasse hinzu, gefolgt von einer Werteliste wie folgt:

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)
Nach dem Login kopieren

Dieser Dekorator generiert automatisch einen separaten Test für jeden Wertesatz in der Liste.

Parametrierung mit parametrisierter Bibliothek

Eine weitere Möglichkeit besteht darin, die parametrisierte Bibliothek zu verwenden. So würde derselbe Test mit dieser Bibliothek aussehen:

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)
Nach dem Login kopieren

In beiden Fällen ist das Ergebnis das gleiche: Auf der Grundlage der bereitgestellten Daten werden mehrere Tests generiert, sodass Sie Ihren Code gründlich testen können.

Ursprünglicher Ansatz zur Parametrisierung

Während die oben beschriebenen Methoden modern und weit verbreitet sind, gab es einen älteren Ansatz, der Testmethoden generierte dynamisch. Dieser Ansatz wird jedoch nicht mehr häufig verwendet und wird nur aus historischen Gründen erwähnt:

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()
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich dynamische Unit-Tests mit Parametrisierung in Python implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage