Heim > Artikel > Backend-Entwicklung > Wie verspotte ich das „open'-Handle in der „with'-Anweisung mit Mock in Python?
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!