]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
unittest.mock doc: Fix references to recursive seal of Mocks (GH-9028)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 19 Oct 2018 22:17:31 +0000 (15:17 -0700)
committerGitHub <noreply@github.com>
Fri, 19 Oct 2018 22:17:31 +0000 (15:17 -0700)
The docs in `library/unittest.mock` have been updated to remove
confusing terms about submock and be explicit about the behavior
expected.
(cherry picked from commit 96200eb2ffcda05de14099cf23f60d5091366e3e)

Co-authored-by: Mario Corchero <mariocj89@gmail.com>
Doc/library/unittest.mock.rst
Lib/unittest/mock.py

index ef1b2e35719df448cfe53c8b65d5fc0704c6edf3..91633b505f567a724ebc5eda36a8c6235595bf47 100644 (file)
@@ -2374,17 +2374,18 @@ Sealing mocks
 
 .. function:: seal(mock)
 
-    Seal will disable the creation of mock children by preventing getting or setting
-    of any new attribute on the sealed mock. The sealing process is performed recursively.
+    Seal will disable the automatic creation of mocks when accessing an attribute of
+    the mock being sealed or any of its attributes that are already mocks recursively.
 
-    If a mock instance is assigned to an attribute instead of being dynamically created
+    If a mock instance with a name or a spec is assigned to an attribute
     it won't be considered in the sealing chain. This allows one to prevent seal from
     fixing part of the mock object.
 
         >>> mock = Mock()
         >>> mock.submock.attribute1 = 2
-        >>> mock.not_submock = mock.Mock()
+        >>> mock.not_submock = mock.Mock(name="sample_name")
         >>> seal(mock)
+        >>> mock.new_attribute  # This will raise AttributeError.
         >>> mock.submock.attribute2  # This will raise AttributeError.
         >>> mock.not_submock.attribute2  # This won't raise.
 
index cfc0d76ee3f7998df7fff7c51ce4fe69c38c04cb..1a6c251d2cf79973bffb132a17df0d3de7523d9b 100644 (file)
@@ -2423,15 +2423,14 @@ class PropertyMock(Mock):
 
 
 def seal(mock):
-    """Disable the automatic generation of "submocks"
+    """Disable the automatic generation of child mocks.
 
     Given an input Mock, seals it to ensure no further mocks will be generated
     when accessing an attribute that was not already defined.
 
-    Submocks are defined as all mocks which were created DIRECTLY from the
-    parent. If a mock is assigned to an attribute of an existing mock,
-    it is not considered a submock.
-
+    The operation recursively seals the mock passed in, meaning that
+    the mock itself, any mocks generated by accessing one of its attributes,
+    and all assigned mocks without a name or spec will be sealed.
     """
     mock._mock_sealed = True
     for attr in dir(mock):