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

Linda Hamilton
Freigeben: 2024-10-20 16:27:02
Original
381 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!