]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-42532: Check if NonCallableMock's spec_arg is not None instead of call its __bool...
authoridanw206 <31290383+idanw206@users.noreply.github.com>
Sun, 6 Dec 2020 09:59:36 +0000 (11:59 +0200)
committerGitHub <noreply@github.com>
Sun, 6 Dec 2020 09:59:36 +0000 (09:59 +0000)
Check if NonCallableMock's spec_arg is not None instead of call its __bool__ function

Lib/unittest/mock.py
Lib/unittest/test/testmock/testmock.py
Misc/NEWS.d/next/Library/2020-12-02-07-37-59.bpo-42532.ObNep_.rst [new file with mode: 0644]

index f5f502f257244cc22afa7a9934690272f0d0d957..4db1bacf4b10cf92bc1b24ef2b98404a484df7c9 100644 (file)
@@ -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)
index 194ce3f61bbfdde666c6c96dcb2fe23c5798b14f..dfcf1ef2ee0302464456e9c67f06c725190e6c2e 100644 (file)
@@ -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()
diff --git a/Misc/NEWS.d/next/Library/2020-12-02-07-37-59.bpo-42532.ObNep_.rst b/Misc/NEWS.d/next/Library/2020-12-02-07-37-59.bpo-42532.ObNep_.rst
new file mode 100644 (file)
index 0000000..7465cb8
--- /dev/null
@@ -0,0 +1 @@
+Remove unexpected call of ``__bool__`` when passing a ``spec_arg`` argument to a Mock.