次のコードをテストするにはどうすればいいですか?unittest.mock
:
def testme(filepath):
with open(filepath) as f:
return f.read()
ベストアンサー1
Python3 について
パッチbuiltins.open
使用してmock_open
の一部であるmock
フレームワーク。patch
として使用されるコンテキストマネージャーパッチを適用したオブジェクトを置き換えるために使用されるオブジェクトを返します。
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")
patch
をデコレータとして使用したい場合、mock_open()
の結果を のnew=
引数として使用するのはpatch
少々奇妙です。代わりにpatch
のnew_callable=
引数を使用してください。使用しない余分な引数はすべてpatch
関数に渡されることに注意してくださいnew_callable
。patch
ドキュメンテーション:
patch()
Mock
任意のキーワード引数を取ります。これらは構築時に(またはnew_callable )に渡されます。
@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")
この場合、patch
モック オブジェクトがテスト関数への引数として渡されることに注意してください。
Python 2
__builtin__.open
の代わりにをパッチする必要がありbuiltins.open
、mock
は の一部ではないので、を個別にインポートするunittest
必要があります。pip install
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")