Adding patch.stopall method to unittest.mock
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 4ae3d16..95570aa 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -1002,6 +1002,7 @@
class _patch(object):
attribute_name = None
+ _active_patches = set()
def __init__(
self, getter, attribute, new, spec, create,
@@ -1270,8 +1271,18 @@
if _is_started(patcher):
patcher.__exit__(*exc_info)
- start = __enter__
- stop = __exit__
+
+ def start(self):
+ """Activate a patch, returning any created mock."""
+ result = self.__enter__()
+ self._active_patches.add(self)
+ return result
+
+
+ def stop(self):
+ """Stop an active patch."""
+ self._active_patches.discard(self)
+ return self.__exit__()
@@ -1562,9 +1573,16 @@
del in_dict[key]
+def _patch_stopall():
+ """Stop all active patches."""
+ for patch in list(_patch._active_patches):
+ patch.stop()
+
+
patch.object = _patch_object
patch.dict = _patch_dict
patch.multiple = _patch_multiple
+patch.stopall = _patch_stopall
patch.TEST_PREFIX = 'test'
magic_methods = (