1. ホーム
  2. パイソン

[解決済み】withステートメントで使用されるopenをモックするには(PythonのMockフレームワークを使用して)どうすればよいですか?)

2022-04-01 02:06:40

質問

以下のコードで、どのようにテストすればよいのでしょうか? unittest.mock :

def testme(filepath):
    with open(filepath) as f:
        return f.read()

解決方法は?

この方法は mock 0.7.0 で変更され、python のプロトコルメソッド (magic methods) のモック、特に MagicMock を使用したモックがサポートされました。

http://www.voidspace.org.uk/python/mock/magicmock.html

open をコンテキストマネージャーとしてモック化した例 (モックドキュメントの 例 のページより)。

>>> open_name = '%s.open' % __name__
>>> with patch(open_name, create=True) as mock_open:
...     mock_open.return_value = MagicMock(spec=file)
...
...     with open('/some/path', 'w') as f:
...         f.write('something')
...
<mock.Mock object at 0x...>
>>> file_handle = mock_open.return_value.__enter__.return_value
>>> file_handle.write.assert_called_with('something')