Skip to content

Commit

Permalink
unittest.mock doc: Fix references to recursive seal of Mocks (GH-9028)
Browse files Browse the repository at this point in the history
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 96200eb)

Co-authored-by: Mario Corchero <mariocj89@gmail.com>
  • Loading branch information
miss-islington and mariocj89 committed Oct 19, 2018
1 parent b9182aa commit 984a800
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
9 changes: 5 additions & 4 deletions Doc/library/unittest.mock.rst
Expand Up @@ -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.

Expand Down
9 changes: 4 additions & 5 deletions Lib/unittest/mock.py
Expand Up @@ -2423,15 +2423,14 @@ def __set__(self, obj, val):


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):
Expand Down

0 comments on commit 984a800

Please sign in to comment.