Schein-Rückgabewert basierend auf der Eingabe in Python

Abid Ullah 21 Juni 2023
  1. Schein-Rückgabewert basierend auf der Eingabe in Python
  2. Verwendung von Mocking in Python
  3. Verwenden Sie Mock-Objekte in Python
  4. Die Bedeutung von Spott in Python
  5. Schreiben Sie einen Mock, der basierend auf der Eingabe unterschiedliche Werte zurückgibt
  6. Python-Mock, der basierend auf der Eingabe zurückgegeben wird
Schein-Rückgabewert basierend auf der Eingabe in Python

In diesem Artikel wird gezeigt, wie Sie eine Scheinfunktion erstellen, die basierend auf der Eingabe in Python unterschiedliche Werte zurückgibt. Wir zeigen Ihnen auch, wie Sie unsere Mock-Funktion testen können.

Abschließend zeigen wir Ihnen einige fortgeschrittenere Techniken zum Mocking von Funktionen. Sie müssen nichts über Programmieren oder Testen wissen, um mitzumachen.

Schein-Rückgabewert basierend auf der Eingabe in Python

Python ist eine unglaublich mächtige Sprache mit einem reichen Ökosystem an Testwerkzeugen. Es hat viele Funktionen, die es perfekt für Unit-Tests machen.

Ein beliebtes Tool ist das mock-Modul, mit dem wir Teile unseres Systems durch Scheinobjekte ersetzen und bestätigen können, wie sie verwendet wurden.

Mocking-Funktionen ermöglichen es uns, die Funktionalität einer Funktion durch unseren Code zu ersetzen. Dies kann nützlich sein, wenn wir das Verhalten unseres Codes testen möchten, wenn eine Funktion nicht verfügbar ist, oder wenn wir testen möchten, wie unser Code auf verschiedene Eingaben reagiert.

Verwendung von Mocking in Python

Mocking ist eine leistungsstarke Technik, die verwendet werden kann, um die Zuverlässigkeit und Effizienz unserer Tests zu verbessern. Dieser Artikel wird uns beibringen, wie man Scheinobjekte in unseren Python-Tests verwendet.

  1. Mocking ermöglicht es uns, reale Objekte durch simulierte Versionen zu ersetzen. Dies kann nützlich sein, wenn wir eine Komponente testen möchten, die von einer anderen Komponente abhängt, die noch nicht verfügbar ist.

    Beispielsweise möchten wir möglicherweise eine Datenbankverbindung testen, ohne uns tatsächlich mit einer Datenbank zu verbinden.

  2. Mocking kann auch verwendet werden, um externe Abhängigkeiten auszublenden. Dies kann nützlich sein, wenn wir während unserer Tests Netzwerkaufrufe oder Interaktionen mit Datenbanken vermeiden möchten.

  3. Mocking kann verwendet werden, um die Effizienz unserer Tests zu verbessern. Wenn wir ein Objekt verspotten, können wir den Aufwand für die Instanziierung des realen Objekts vermeiden.

    Dies kann besonders nützlich sein, wenn Code getestet wird, der viele Objekte instanziiert.

  4. Mocking kann auch verwendet werden, um unsere Tests zuverlässiger zu machen. Durch das Ausschließen externer Abhängigkeiten können fehlerhafte Tests vermieden werden, die von der Netzwerk- oder Datenbankverfügbarkeit abhängen.

Verwenden Sie Mock-Objekte in Python

Um Mock-Objekte in unseren Tests zu verwenden, müssen wir zuerst eine Mock-Klasse erstellen. Diese Klasse kann verwendet werden, um Scheinobjekte zu erstellen, die wie die Realität aussehen und sich verhalten.

Sobald wir eine Mock-Klasse haben, können wir Mock-Objekte instanziieren und sie in unseren Tests verwenden. Mock-Objekte haben dieselben Methoden wie die realen Objekte, die sie ersetzen, sodass wir sie genauso verwenden können, wie wir das echte Ding verwenden würden.

Wenn wir mit der Verwendung eines Scheinobjekts fertig sind, können wir bestätigen, dass es korrekt verwendet wurde. Beispielsweise können wir behaupten, dass eine simulierte Datenbankverbindung verwendet wurde, um eine Abfrage auszuführen.

Daher ist Mocking ein mächtiges Werkzeug, das verwendet werden kann, um die Zuverlässigkeit und Effizienz unserer Python-Tests zu verbessern.

Indem wir reale Objekte durch Scheinobjekte ersetzen, können wir den Aufwand für die Instanziierung des realen Objekts vermeiden. Wir können auch externe Abhängigkeiten ausschließen, um unsere Tests zuverlässiger zu machen.

Die Bedeutung von Spott in Python

Das Wort mocking wird in mehreren Zusammenhängen verwendet; In diesem Dokument wird jedoch die folgende Definition verwendet:

Der Prozess des Ersetzens von gefälschten Aufrufen oder Objekten durch einen oder mehrere tatsächliche Funktionsaufrufe oder Objekte.

Ein Aufruf einer Mock-Funktion liefert einen voreingestellten Momentanwert ohne eigentliche Arbeit. Die Eigenschaften und Methoden eines gefälschten Objekts werden auf die gleiche Weise vollständig innerhalb des Tests definiert, ohne dass zuerst das eigentliche Objekt generiert oder andere Arbeiten ausgeführt werden müssen.

Beim Testen verleiht die Tatsache, dass die Person, die den Test geschrieben hat, die Rückgabewerte des Funktionsaufrufs definieren kann, ihr enorme Macht. Es bedeutet jedoch auch, dass die Person, die den Test schreibt, einige grundlegende Arbeiten erledigen muss, um alles genau einzurichten.

Für das Mocking in der Programmiersprache ist das Modul unittest.mock in Python zuständig. Die Patch-Funktion, die als Decorator und Kontextmanager fungiert, und die Klasse MagicMock sind zwei wesentliche Klassen und Funktionen in diesem Modul.

Es enthält auch mehrere andere hilfreiche Klassen und Methoden. Die meiste Arbeit, die mit dem Verspotten von Python verbunden ist, kann mit diesen beiden robusten Komponenten erledigt werden.

Schreiben Sie einen Mock, der basierend auf der Eingabe unterschiedliche Werte zurückgibt

Jetzt, wo wir Mock und seine Funktionalitäten gut kennen. Lassen Sie uns Mock anhand von Codierungsbeispielen besser verstehen.

Um die Funktion zu erstellen, verwenden wir *args und **kwargs, da diese Parameter einfache Argumente und Schlüsselwortargumente annehmen. Wir können also jeden Datentyp übergeben: String, Integer, Float und Boolean, und wir können auch Schlüsselwortargumenten Werte zuweisen.

  • Erstellen Sie eine Funktion.
  • Übergeben Sie die Argumente *args und das Schlüsselwortargument **kwargs
  • Gibt ein Tupel mit *args und **kwargs zurück
  • Rufen Sie die Funktion auf
  • Drucken Sie das Ergebnis aus

Sehen Sie sich zum besseren Verständnis den folgenden Code an.

def mock_function(*args, **kwargs):
    return (args, kwargs)


mock_function("x", "y")
(("x", "y"), {})
mock_function("x", y=2, z="mock test")

Ausgang:

(('x',), {'y': 2, 'z': 'mock test'})

In der Codeausgabe können wir sehen, dass der *args-Wert zuerst gedruckt wird, also x und der **kwargs-Wert {'y': 2, 'z': 'mock test'}) wird danach gedruckt.

Python-Mock, der basierend auf der Eingabe zurückgegeben wird

Jetzt erstellen wir einen Mock, der die zuvor besprochene Funktion zurückgibt.

  • Um eine Mock-Funktion zu erstellen, importieren wir zuerst MagicMock aus dem Modul unittest.mock.
  • Erstellen Sie eine Variable und verwenden Sie den MagicMock aus unittest.mock.
  • Drucken Sie das Ergebnis aus.

Beispielcode:

from unittest.mock import MagicMock

my_mock_1 = MagicMock(name="abid", return_value=mock_function)
my_mock_1

Ausgang:

<MagicMock name='abid' id='139916486559696'>

Die Codeausgabe zeigt, dass der Befehl MagicMock verwendet wird. Und wir können den Namen abid sehen, den wir im Code verwendet haben, und eine vom Code generierte ID-Nummer.

Jetzt erstellen wir eine weitere Variable, um zu sehen, wo sich unsere Variable my_mock_1 befindet.

Beispielcode:

func_from_mock2 = my_mock_1()
func_from_mock2

Ausgang:

<function __main__.mock_function(*args, **kwargs)>

Die Codeausgabe zeigt, dass die Funktion die Argumente *args und das Schlüsselwortargument **kwargs trägt.

Nun geben wir unserer Variable func_from_mock2 einige Werte. Also werden wir 10, 10 übergeben und drucken.

Beispielcode:

func_from_mock2(10, 10)

Ausgang:

((10, 10), {})

Die Ausgabe ((10, 10)) bedeutet, dass wir die Argumente *args verwendet haben, und {} bedeutet, dass wir das Schlüsselwortargument **kwargs verwenden können.

Jetzt verwenden wir das Schlüsselwortargument **kwargs.

Beispielcode:

func_from_mock2(15, 18, param=50)

Ausgang:

((15, 18), {'param': 50})

Wir haben beide Argumente *args und das Schlüsselwortargument **kwargs verwendet. ((15, 18), zeigt den Argumentteil der Scheineingabe und {'param': 50}) zeigt den Schlüsselwortargumentteil der Scheineingabe.

So gibt Mock je nach Eingabe unterschiedliche Werte zurück.

Wir hoffen, dass Sie diesen Python-Artikel hilfreich finden, um zu verstehen, wie man Mock in Python verwendet.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

Verwandter Artikel - Python Mock