Wie verspotte ich das „open'-Handle in der „with'-Anweisung mit Mock in Python?

Patricia Arquette
Freigeben: 2024-10-20 16:24:02
Original
796 Leute haben es durchsucht

How to Mock the

Offenes Handle in einer With-Anweisung mit Mock in Python verspotten

Beim Schreiben von Komponententests für Code, der die with-Anweisung und Dateioperationen verwendet, Das Verspotten des offenen Handles ist notwendig, um das Verhalten des getesteten Codes zu isolieren. So erreichen Sie dies mit dem Mock-Framework in Python:

Python 3

Mit dem Modul unittest.mock können Sie integrierte Funktionen wie open patchen. So geht's:

<code class="python">from unittest.mock import patch, mock_open

with patch("builtins.open", mock_open(read_data="data")) as mock_file:
    assert open("path/to/open").read() == "data"
mock_file.assert_called_with("path/to/open")</code>
Nach dem Login kopieren

Python 2

Für Python 2 unterscheidet sich die Syntax geringfügig. Anstatt Builtins.open zu patchen, müssen Sie __builtin__.open patchen und Mock separat importieren:

<code class="python">import mock

with mock.patch("__builtin__.open", mock_open(read_data="data")) as mock_file:
    assert open("path/to/open").read() == "data"
mock_file.assert_called_with("path/to/open")</code>
Nach dem Login kopieren

Patchen mit einem Decorator

Sie können auch den Patch verwenden Dekorator für eine sauberere Syntax. Allerdings kann es schwierig sein, das Ergebnis von „mock_open“ direkt im Argument „new=“ für „patch“ zu verwenden. Nutzen Sie stattdessen das Argument new_callable=, wie in der Dokumentation beschrieben:

<code class="python">@patch("builtins.open", new_callable=mock_open, read_data="data")
def test_patch(mock_file):
    assert open("path/to/open").read() == "data"
    mock_file.assert_called_with("path/to/open")</code>
Nach dem Login kopieren

Hinweis: Beachten Sie, dass in diesem Fall das gepatchte Objekt als Argument für Ihren Test übergeben wird Funktion.

Das obige ist der detaillierte Inhalt vonWie verspotte ich das „open'-Handle in der „with'-Anweisung mit Mock in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
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