mirror of https://github.com/python/cpython
bpo-32299: Return patched dict when using patch.dict as a context manager (GH-11062)
This commit is contained in:
parent
eb65e2443a
commit
04530812e9
|
@ -1556,15 +1556,24 @@ patch.dict
|
|||
decorator. When used as a class decorator :func:`patch.dict` honours
|
||||
``patch.TEST_PREFIX`` for choosing which methods to wrap.
|
||||
|
||||
.. versionchanged:: 3.8
|
||||
|
||||
:func:`patch.dict` now returns the patched dictionary when used as a context
|
||||
manager.
|
||||
|
||||
:func:`patch.dict` can be used to add members to a dictionary, or simply let a test
|
||||
change a dictionary, and ensure the dictionary is restored when the test
|
||||
ends.
|
||||
|
||||
>>> foo = {}
|
||||
>>> with patch.dict(foo, {'newkey': 'newvalue'}):
|
||||
>>> with patch.dict(foo, {'newkey': 'newvalue'}) as patched_foo:
|
||||
... assert foo == {'newkey': 'newvalue'}
|
||||
... assert patched_foo == {'newkey': 'newvalue'}
|
||||
... # You can add, update or delete keys of foo (or patched_foo, it's the same dict)
|
||||
... patched_foo['spam'] = 'eggs'
|
||||
...
|
||||
>>> assert foo == {}
|
||||
>>> assert patched_foo == {}
|
||||
|
||||
>>> import os
|
||||
>>> with patch.dict('os.environ', {'newkey': 'newvalue'}):
|
||||
|
|
|
@ -1730,6 +1730,7 @@ class _patch_dict(object):
|
|||
def __enter__(self):
|
||||
"""Patch the dict."""
|
||||
self._patch_dict()
|
||||
return self.in_dict
|
||||
|
||||
|
||||
def _patch_dict(self):
|
||||
|
|
|
@ -619,6 +619,13 @@ class PatchTest(unittest.TestCase):
|
|||
self.assertEqual(foo.values, original)
|
||||
|
||||
|
||||
def test_patch_dict_as_context_manager(self):
|
||||
foo = {'a': 'b'}
|
||||
with patch.dict(foo, a='c') as patched:
|
||||
self.assertEqual(patched, {'a': 'c'})
|
||||
self.assertEqual(foo, {'a': 'b'})
|
||||
|
||||
|
||||
def test_name_preserved(self):
|
||||
foo = {}
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Changed :func:`unittest.mock.patch.dict` to return the patched
|
||||
dictionary when used as context manager. Patch by Vadim Tsander.
|
Loading…
Reference in New Issue