Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verspotte ich geöffnete Dateien in Python Unittest.Mock?

Wie verspotte ich geöffnete Dateien in Python Unittest.Mock?

Linda Hamilton
Linda HamiltonOriginal
2024-10-20 16:27:02383Durchsuche

How to Mock Open Files 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!

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