bpo-38157: Add example about per file output for mock_open. (#16090)

Co-authored-by: Stanley <46876382+slateny@users.noreply.github.com>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
This commit is contained in:
Karthikeyan Singaravelan 2023-09-07 14:49:13 +05:30 committed by GitHub
parent 3e53ac9903
commit e183a71eef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -360,6 +360,30 @@ of arbitrary attributes as well as the getting of them then you can use
*spec_set* instead of *spec*.
Using side_effect to return per file content
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:func:`mock_open` is used to patch :func:`open` method. :attr:`~Mock.side_effect`
can be used to return a new Mock object per call. This can be used to return different
contents per file stored in a dictionary::
DEFAULT = "default"
data_dict = {"file1": "data1",
"file2": "data2"}
def open_side_effect(name):
return mock_open(read_data=data_dict.get(name, DEFAULT))()
with patch("builtins.open", side_effect=open_side_effect):
with open("file1") as file1:
assert file1.read() == "data1"
with open("file2") as file2:
assert file2.read() == "data2"
with open("file3") as file2:
assert file2.read() == "default"
Patch Decorators
----------------