So generieren Sie dynamische (parametrisierte) Unit-Tests in Python
Einführung
Beim Testen Bei komplexen Funktionen ist es häufig erforderlich, mehrere Testfälle mit leicht unterschiedlichen Eingaben zu erstellen. Das manuelle Erstellen jedes Testfalls kann mühsam und fehleranfällig sein. Hier kommen parametrisierte Tests ins Spiel.
Parametrisierung
Parametrisierung ermöglicht es Ihnen, einen einzelnen Testfall zu definieren und eine Liste von Parameterwerten bereitzustellen, um den Test für jeden auszuführen Satz von Parametern. Dieser Ansatz automatisiert die Testfallgenerierung und stellt sicher, dass alle möglichen Eingaben getestet werden.
Verwendung des Parametrizers von pytest
pytest bietet einen praktischen Dekorator, @pytest.mark.parametrize, für Parametrierung von Testfunktionen. Als Argument wird eine Liste von Tupeln oder Wörterbüchern verwendet, die jeweils einen Satz Parameterwerte darstellen.
import pytest test_data = [ ("foo", "a", "a"), ("bar", "a", "b"), ("lee", "b", "b"), ] @pytest.mark.parametrize("name, a, b", test_data) def test_sequence(name, a, b): assert a == b
Dieser Code generiert drei Tests, einen für jeden Parametersatz in test_data. Die Testnamen werden automatisch basierend auf den Parameterwerten generiert.
Verwendung des parametrisierten Pakets
Das parametrisierte Paket bietet eine flexiblere Schnittstelle für die Parametrisierung. Sie können damit eine Generatorfunktion definieren, die eine Folge von Testfällen zurückgibt.
from parameterized import parameterized test_data = [ ("foo", "a", "a"), ("bar", "a", "b"), ("lee", "b", "b"), ] @parameterized.expand(test_data) def test_sequence(name, a, b): assert a == b
Auch dieser Code generiert drei Tests, einen für jeden Parametersatz in test_data. Die Testnamen werden automatisch generiert.
Vorteile
Die Verwendung parametrisierter Tests bietet mehrere Vorteile:
Das obige ist der detaillierte Inhalt vonWie generiert man effizient parametrisierte Unit-Tests in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!