summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorChris Withers <chris@withers.org>2018-12-03 21:31:37 (GMT)
committerGitHub <noreply@github.com>2018-12-03 21:31:37 (GMT)
commit8ca0fa9d2f4de6e69f0902790432e0ab2f37ba68 (patch)
treec1af80e0a0ee140f84cf87b02caca5e5d9ed67d5 /Doc
parent3bc0ebab17bf5a2c29d2214743c82034f82e6573 (diff)
downloadcpython-8ca0fa9d2f4de6e69f0902790432e0ab2f37ba68.zip
cpython-8ca0fa9d2f4de6e69f0902790432e0ab2f37ba68.tar.gz
cpython-8ca0fa9d2f4de6e69f0902790432e0ab2f37ba68.tar.bz2
bpo-35226: Fix equality for nested unittest.mock.call objects. (#10555)
Also refactor the call recording imolementation and add some notes about its limitations.
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/unittest.mock-examples.rst9
-rw-r--r--Doc/library/unittest.mock.rst13
2 files changed, 22 insertions, 0 deletions
diff --git a/Doc/library/unittest.mock-examples.rst b/Doc/library/unittest.mock-examples.rst
index 60db4c2..16690f3 100644
--- a/Doc/library/unittest.mock-examples.rst
+++ b/Doc/library/unittest.mock-examples.rst
@@ -166,6 +166,15 @@ You use the :data:`call` object to construct lists for comparing with
>>> mock.mock_calls == expected
True
+However, parameters to calls that return mocks are not recorded, which means it is not
+possible to track nested calls where the parameters used to create ancestors are important:
+
+ >>> m = Mock()
+ >>> m.factory(important=True).deliver()
+ <Mock name='mock.factory().deliver()' id='...'>
+ >>> m.mock_calls[-1] == call.factory(important=False).deliver()
+ True
+
Setting Return Values and Attributes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst
index 0ae2954..bfab00e 100644
--- a/Doc/library/unittest.mock.rst
+++ b/Doc/library/unittest.mock.rst
@@ -702,6 +702,19 @@ the *new_callable* argument to :func:`patch`.
unpacked as tuples to get at the individual arguments. See
:ref:`calls as tuples <calls-as-tuples>`.
+ .. note::
+
+ The way :attr:`mock_calls` are recorded means that where nested
+ calls are made, the parameters of ancestor calls are not recorded
+ and so will always compare equal:
+
+ >>> mock = MagicMock()
+ >>> mock.top(a=3).bottom()
+ <MagicMock name='mock.top().bottom()' id='...'>
+ >>> mock.mock_calls
+ [call.top(a=3), call.top().bottom()]
+ >>> mock.mock_calls[-1] == call.top(a=-1).bottom()
+ True
.. attribute:: __class__