Skip to content

Commit

Permalink
bpo-42532: Check if NonCallableMock's spec_arg is not None instead of…
Browse files Browse the repository at this point in the history
… call its __bool__ function (GH23613)

Check if NonCallableMock's spec_arg is not None instead of call its __bool__ function

Backports: c598a04dd29b89ad072245ddaf738badcfb41ac7
Signed-off-by: Chris Withers <chris@simplistix.co.uk>
  • Loading branch information
idanw206 authored and cjw296 committed Dec 10, 2020
1 parent e5d7551 commit f7e3ea8
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 1 deletion.
1 change: 1 addition & 0 deletions NEWS.d/2020-12-02-07-37-59.bpo-42532.ObNep_.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Remove unexpected call of ``__bool__`` when passing a ``spec_arg`` argument to a Mock.
2 changes: 1 addition & 1 deletion mock/mock.py
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ def __new__(cls, *args, **kw):
# Check if spec is an async object or function
bound_args = _MOCK_SIG.bind_partial(cls, *args, **kw).arguments
spec_arg = bound_args.get('spec_set', bound_args.get('spec'))
if spec_arg and _is_async_obj(spec_arg):
if spec_arg is not None and _is_async_obj(spec_arg):
bases = (AsyncMockMixin, cls)
new = type(cls.__name__, bases, {'__doc__': cls.__doc__})
instance = _safe_super(NonCallableMock, cls).__new__(new)
Expand Down
10 changes: 10 additions & 0 deletions mock/tests/testmock.py
Original file line number Diff line number Diff line change
Expand Up @@ -2167,6 +2167,16 @@ def trace(frame, event, arg): # pragma: no cover
obj = mock(spec=Something)
self.assertIsInstance(obj, Something)

def test_bool_not_called_when_passing_spec_arg(self):
class Something:
def __init__(self):
self.obj_with_bool_func = unittest.mock.MagicMock()

obj = Something()
with unittest.mock.patch.object(obj, 'obj_with_bool_func', autospec=True): pass

self.assertEqual(obj.obj_with_bool_func.__bool__.call_count, 0)


if __name__ == '__main__':
unittest.main()

0 comments on commit f7e3ea8

Please sign in to comment.