Offene Dateien in With-Anweisungen im Unit Test Framework von Python verspotten
Beim Testen von Code, der offene Dateien in With-Anweisungen verwendet, besteht die Notwendigkeit, dies zu tun Verspotten Sie diese offenen Dateien für genaue Unit-Tests. Dieser Artikel befasst sich mit den Ansätzen zum Verspotten solcher Dateien mithilfe des Mock-Frameworks von Python.
Python Version 3
Das Mock-Framework stellt die Funktion „mock_open“ bereit, die in Verbindung verwendet werden kann mit dem Patch-Kontextmanager, um geöffnete Dateien zu verspotten. Die Patch-Funktion, die als Kontextmanager verwendet wird, gibt das Objekt zurück, das das gepatchte Objekt ersetzt:
<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 die Patch-Funktion als Dekorator mit dem Argument new_callable verwendet werden. Denken Sie daran, dass zusätzliche Argumente, die nicht vom Patch verwendet werden, an die Funktion new_callable ü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>
In diesem Fall wird das simulierte Objekt als Argument an die Testfunktion übergeben.
Python Version 2
Für Python 2 muss das Modul __builtin__.open anstelle vonbuiltins.open gepatcht werden und das Mock-Framework muss separat über pip:
<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>
Diese Techniken ermöglichen das effektive Verspotten offener Dateien innerhalb von Anweisungen und erleichtern so umfassende Unit-Tests für Python-Anwendungen.
Das obige ist der detaillierte Inhalt vonWie verspotte ich geöffnete Dateien in Python mit Anweisungen mithilfe des Unit Test Frameworks?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!