diff options
author | idanw206 <31290383+idanw206@users.noreply.github.com> | 2020-12-06 11:59:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-06 09:59:36 +0000 |
commit | c598a04dd29b89ad072245ddaf738badcfb41ac7 (patch) | |
tree | 61ff268e651be370ce309083b586f725c142f150 /Lib | |
parent | 804d6893b801e8f30318afc38c20d4d0e6161db3 (diff) | |
download | cpython-git-c598a04dd29b89ad072245ddaf738badcfb41ac7.tar.gz |
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
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/unittest/mock.py | 2 | ||||
-rw-r--r-- | Lib/unittest/test/testmock/testmock.py | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index f5f502f257..4db1bacf4b 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -406,7 +406,7 @@ class NonCallableMock(Base): # 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) diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py index 194ce3f61b..dfcf1ef2ee 100644 --- a/Lib/unittest/test/testmock/testmock.py +++ b/Lib/unittest/test/testmock/testmock.py @@ -2165,6 +2165,16 @@ class MockTest(unittest.TestCase): 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() |