Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verspotte ich das „open'-Handle in der „with'-Anweisung mit Mock in Python?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-10-20 16:24:02795Durchsuche

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>

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>

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>

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!

Stellungnahme:
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