首頁  >  文章  >  後端開發  >  如何在Python中使用Mock來模擬「with」語句中的「open」句柄?

如何在Python中使用Mock來模擬「with」語句中的「open」句柄?

Patricia Arquette
Patricia Arquette原創
2024-10-20 16:24:02690瀏覽

How to Mock the

在Python 中使用Mock 在With 語句中模擬Open Handle

為使用with 語句和檔案操作的程式碼編寫單元測試時,為了隔離測試程式碼的行為,需要模擬開啟的句柄。以下是如何使用 Python 中的 Mock 框架實現此目的:

Python 3

使用 unittest.mock 模組,您可以修補 openopen 等內建函數。具體方法如下:

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

Python 2

對於 Python 2,語法略有不同。您不需要修補builtins.open,而是需要單獨修補__builtin__.open並導入mock:

<code class="python">import mock

with mock.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>

使用裝飾器修補

您也可以使用補丁裝飾器以獲得更清晰的語法。然而,直接在 patch 的 new= 參數中使用mock_open 的結果可能會很棘手。相反,請按照文件中所述利用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>

注意: 請記住,在這種情況下,修補的物件將作為參數傳遞給您的測試功能。

以上是如何在Python中使用Mock來模擬「with」語句中的「open」句柄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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