Bug report
Bug description:
Hello, thanks for the work you do!
My issue: Updating from 3.12.3 to 3.12.4 breaks many elements in my test suite. We use the name= argument to better understand log messages once a test with many objects fails.
This works with 3.12.3, but crashes with 3.12.4. The issue might have been introduced with this fix: 23ba96e
Code example
File autospec_test.py:
import unittest from unittest.mock import create_autospec class X: ... class TestX(unittest.TestCase): def test_x(self): mock = create_autospec(X, spec_set=True, name="X") if __name__ == "__main__": unittest.main()
Observed behavior
python 3.12.3
python autospec_test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
python 3.12.4
python autospec_test.py E ====================================================================== ERROR: test_x (__main__.TestX.test_x) ---------------------------------------------------------------------- Traceback (most recent call last): File ".../autospec_test.py", line 10, in test_x mock = create_autospec(X, spec_set=True, name="X") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/unittest/mock.py", line 2823, in create_autospec mock.configure_mock(**kwargs) File "/usr/local/lib/python3.12/unittest/mock.py", line 650, in configure_mock setattr(obj, final, val) File "/usr/local/lib/python3.12/unittest/mock.py", line 774, in __setattr__ raise AttributeError("Mock object has no attribute '%s'" % name) AttributeError: Mock object has no attribute 'name' ---------------------------------------------------------------------- Ran 1 test in 0.003s FAILED (errors=1)
CPython versions tested on:
3.12
Operating systems tested on:
Linux, (CI pipelines failed on windows, too – didn't test this example, though.)