Skip to content

Python 3.12.3 -> 3.12.4 breaks use of create_autospec(X, spec_set=True, name="X")  #120732

Description

@ShapingView

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.)

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.12only security fixes3.13bugs and security fixes3.14bugs and security fixesstdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions