Python Autospec Spott

Python Autospec Spott
„Bei der Entwicklung von Tests sind sowohl Verspottung als auch Mocks unglaublich hilfreich, da sie die Trennung der gemachten Referenz aus seinen Abhängigkeiten ermöglichen, was zu weniger spröden Tests führt. Durch die Einbeziehung von Mocks in die Unit -Tests können wir sicher sein, dass Fehler durch eine Änderung der Implementierung des Tests des Tests verursacht werden. Die Konfiguration von Mocks kann jedoch zu Tests führen, die bestehen, wenn sie fehlschlagen müssen. In diesem Artikel werden wir einige Beispiele verwenden, um die Arbeit von Autospace -Verspottung in Python zu veranschaulichen.”

Beispiel 01

Beginnen wir mit der ersten Illustration. Der Rechner.Das PY -Modul enthält die nachfolgenden Codezeilen. In der ersten Zeile haben wir die Zugabe der Funktion definiert und für den Klassenrechner multipliziert. Zwei Zahlen werden mit der zweiten Funktion mit dem Namen "Multiplizieren" miteinander multipliziert. In ähnlicher Weise wird die erste Funktion verwendet, um die Summe der beiden Zahlen zu erhalten. Beide Funktionen geben nur die Addition und einige der mitgelieferten Zahlen zurück. Sie drucken keine Ausgabe.

Wir haben zwei Modulfunktionen außerhalb der Klasse erstellt, in der Klassenobjekte des Taschenrechnertyps erstellt werden, und die Additions- und Multiplikationsmethoden der Taschenrechnerklasse werden aufgerufen. Überprüfen Sie den Code im angebotenen Bild.

Die Summe- und Multiplikationsfunktionen aus dem Taschenrechner.Das PY -Modul wird im einfachen Modul verwendet, das wir konstruieren, Testrechner, Testrechner.py. Der Code ist unglaublich einfach; Wir importieren nur die Multiplikations- und Summenmethoden aus dem Taschenrechnermodul. Anschließend haben wir die Summenfunktion ausgeführt und die 2 und 5 als Parameter geliefert.

Ähnlich wie wir die Multiplikationsfunktion bezeichnet haben, haben wir die Parameter 5 und 3 in diese Modulfunktion übergeben. Mit der Druckanweisung zeigen wir die Ausgabe an, die diese Funktionen zurückgeben. Überprüfen Sie den Code im angebotenen Bild.

Führen Sie den test_calculator aus.PY -Modul an diesem Punkt, um die Ergebnisse zu sehen. Obwohl Sie jedes andere Tool verwenden können, schreiben und führen wir den Code mit dem Spyder 3 -Tool aus und führen sie aus. Die Ausgabe im Spyder -Werkzeugterminal ist sichtbar, wie Sie sehen können. Verwenden des Taschenrechners.PY -Klasse, die Multiplikationsausgabe der Funktion beträgt 15 und seine Summenausgabe beträgt 7, was das beabsichtigte Ergebnis ist.

Beispiel 02

Jetzt gehen wir zu einem Test für Summe und Multiplikation, aber nehmen wir an, dass wir die Hinzufügung und Multiplizierungen verspotten müssen. Spott und Mocks sind sehr nützlich, wenn wir Tests für unsere Module schreiben, da wir die Testziele von ihren Abhängigkeiten, die weniger fragile Tests verursachen. Wenn wir in unseren Unit -Tests Mocks einsetzen, werden alle Tests aufgrund einer Änderung der Implementierung des Ziels dies ausführen.

Wir können das Modell jedoch auf eine Weise aufbauen, die verhindern könnte, dass Tests fehlschlagen, wenn sie sollten! Lassen Sie uns unseren test_calculator aktualisieren.PY -Modul zum Hinzufügen von Mockup -Code zu ihm. Der Code -Snapshot ist unten angezeigt:

Bei der Ausführung ist dieser einfache Test erfolgreich. Das Angeben beinhaltet das Erstellen eines Scheinobjekts mit derselben API/Struktur wie das verspottete Objekt, das fehlschlägt, wenn es so verwendet wird, dass es von der Spezifikation abweicht. Die Funktion create_autospec im Mock -Modul ist die erste von zwei Methoden, um dies zu erreichen. Erstellen wir ein Scheinobjekt mit der Spezifikation der angegebenen Funktion. Überprüfen Sie den Code im angebotenen Bild.

Wenn Sie ein anderes Objekt als Spezifikation verwenden, wird ein Scheinobjekt unter Verwendung der Funktion Create Autospec erstellt. Die Signatur aller Funktionen, die auf dem Schein gerufen werden, wird zuerst verifiziert. Dies ist vorteilhaft, da die Mock -Funktion jetzt auf der tatsächlichen Implementierung beruht und wir auf ein Problem stoßen, wenn sich die Version ändert und der Taschenrechner die Signaturen der Angehörigen nicht respektiert.

Wenn wir das obige Code für den Unit -Test ausführen, finden wir während der Ausführung keinen Fehler. Es bedeutet, dass wir den Test bestanden haben. Jetzt haben wir den Code aktualisiert und nur ein paar Zeilen hinzugefügt. Wir haben die Multiplikationsfunktion an die Funktion create_autospace übergeben und die Ausgabe vor dem Multiplizieren gespeichert. Überprüfen Sie den Code im angebotenen Bild.

Wenn wir die Funktion aufrufen, um sich mit einem einzelnen Parameter zu multiplizieren und den Code auszuführen, erhöht er einen Fehler auf dem folgenden Ausgangsbildschirm:

Wenn wir keinen Parameter an diese Funktion übergeben, fordert der Benutzer auf, NUM1- und Num2 -Werte einzugeben. Überprüfen Sie den Code im angebotenen Bild.

Hier ist der Screenshot der Ausführung des Code:

Wenn wir beide Argumente NUM1 und Num2 bestehen, wird der obige Test erfolgreich durchgeführt. Die Änderungen in den Codes sind im folgenden Bildschirm zu sehen:

Wie wir bereits diskutiert haben, ist create_autospec eine Methode dafür, aber eine andere besteht darin, autospec = true festzulegen, wenn der Patch -Dekorator verwendet wird, um ein Objekt zu simulieren. Wir kehren zum test_calculator -Modul zurück und aktualisieren den Code wie unten angegeben. Die ersten beiden Linien wurden bereits in mehreren Fällen verwendet. Der Modulfunktionsname und der Wert der für die autspec true wurden an den @mock übergeben.Pfadmethode in der dritten Codezeile.

Rechts unten haben wir eine Funktion definiert, die als Test_Multiply bezeichnet wird, wo wir die Scheinobjektvariable übergeben haben. Später müssen wir dieselbe Variable verwenden, um die Multiply -Funktion aufzurufen. In diesem Code befindet sich eine Zeile, die einen Fehler enthält, der die 6 istth Zeile, da wir die Mockup -Funktion verwenden müssen, um zu arbeiten, anstatt direkt die Multiplikationsfunktion zu verwenden. Überprüfen Sie den Code im angebotenen Bild.

Hier ist der aktualisierte Code. Wenn wir diesen Unit -Test ausführen, erhalten wir keinen Fehler, was bedeutet, dass dieser Test bestanden wird. Überprüfen Sie den Code im angebotenen Bild.

Abschluss

Hier geht. Alle in diesem Artikel verwendeten Beispiele sind einfach zu tun und zu lernen. Versuchen Sie also, niemanden davon zu verpassen, um ein besseres Verständnis zu bekommen.