首頁  >  文章  >  後端開發  >  如何在 Python Unittest.Mock 中模擬開啟的檔案?

如何在 Python Unittest.Mock 中模擬開啟的檔案?

Linda Hamilton
Linda Hamilton原創
2024-10-20 16:27:02484瀏覽

How to Mock Open Files in Python Unittest.Mock?

在Python Unittest.Mock 中模擬開啟檔案

在測試使用檔案操作的Python 程式碼時,有效地模擬開啟檔案的行為至關重要。在with 語句中使用open 時會出現一種特定情況,如以下程式碼所示:

<code class="python">def testme(filepath):
    with open(filepath) as f:
        return f.read()</code>

Python 3

要模擬此open 操作,請使用unittest.mock 與mock_open 結合使用,它是mock 框架的一部分。 patch 充當上下文管理器,傳回用於替換修補物件的物件:

<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>

或者,patch 也可以用作裝飾器。然而,使用mock_open()的結果作為新參數可能會很麻煩。相反,請利用patch 的new_callable 參數,並記住patch 未使用的其他參數將傳遞給new_callable 函數:

<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>

請注意,在此實例中,patch 將提供模擬物件作為測試函數的參數.

Python 2

對於Python 2,需要修補__builtin__.open 並單獨導入模擬:

<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>

以上是如何在 Python Unittest.Mock 中模擬開啟的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn