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)
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)
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()
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!