Heim > Artikel > Backend-Entwicklung > Wie verspotte ich geöffnete Dateien in Python Unittest.Mock?
Offene Dateien in Python Unittest.Mock verspotten
Beim Testen von Python-Code, der Dateioperationen verwendet, ist es wichtig, das Verhalten geöffneter Dateien effektiv zu verspotten . Ein bestimmtes Szenario entsteht, wenn open innerhalb einer with-Anweisung verwendet wird, wie im folgenden Code zu sehen ist:
<code class="python">def testme(filepath): with open(filepath) as f: return f.read()</code>
Python 3
Um diesen offenen Vorgang zu verspotten, verwenden Sie unittest.mock in Verbindung mit mock_open, das Teil des Mock-Frameworks ist. patch dient als Kontextmanager und gibt das Objekt zurück, das zum Ersetzen des gepatchten Objekts verwendet wurde:
<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>
Alternativ kann patch als Dekorator verwendet werden. Allerdings kann es umständlich sein, das Ergebnis von mock_open() als neues Argument zu verwenden. Verwenden Sie stattdessen das new_callable-Argument von Patch und denken Sie daran, dass zusätzliche Argumente, die nicht von Patch verwendet werden, an die new_callable-Funktion übergeben werden:
<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>
Beachten Sie, dass Patch in diesem Fall das simulierte Objekt als Argument für die Testfunktion bereitstellt .
Python 2
Für Python 2 ist es notwendig, stattdessen __builtin__.open zu patchen und Mock separat zu importieren:
<code class="python">from mock import patch, mock_open with 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>
Das obige ist der detaillierte Inhalt vonWie verspotte ich geöffnete Dateien in Python Unittest.Mock?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!