在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中文網其他相關文章!