bpo-42532: Check if NonCallableMock's spec_arg is not None instead of call its __bool__ function (GH23613)
Check if NonCallableMock's spec_arg is not None instead of call its __bool__ function
This commit is contained in:
parent
804d6893b8
commit
c598a04dd2
|
@ -406,7 +406,7 @@ class NonCallableMock(Base):
|
||||||
# Check if spec is an async object or function
|
# Check if spec is an async object or function
|
||||||
bound_args = _MOCK_SIG.bind_partial(cls, *args, **kw).arguments
|
bound_args = _MOCK_SIG.bind_partial(cls, *args, **kw).arguments
|
||||||
spec_arg = bound_args.get('spec_set', bound_args.get('spec'))
|
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)
|
bases = (AsyncMockMixin, cls)
|
||||||
new = type(cls.__name__, bases, {'__doc__': cls.__doc__})
|
new = type(cls.__name__, bases, {'__doc__': cls.__doc__})
|
||||||
instance = _safe_super(NonCallableMock, cls).__new__(new)
|
instance = _safe_super(NonCallableMock, cls).__new__(new)
|
||||||
|
|
|
@ -2165,6 +2165,16 @@ class MockTest(unittest.TestCase):
|
||||||
obj = mock(spec=Something)
|
obj = mock(spec=Something)
|
||||||
self.assertIsInstance(obj, 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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Remove unexpected call of ``__bool__`` when passing a ``spec_arg`` argument to a Mock.
|
Loading…
Reference in New Issue