Bug 2019006 - python-mock fails to build with Python 3.11: AttributeError: 'MockTest' object has no attribute 'assertRegexpMatches'
Summary: python-mock fails to build with Python 3.11: AttributeError: 'MockTest' objec...
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Fedora
Classification: Fedora
Component: python-mock
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Tomáš Hrnčiar
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: F36FTBFS PYTHON3.11
TreeView+ depends on / blocked
 
Reported: 2021-11-01 13:22 UTC by Tomáš Hrnčiar
Modified: 2022-01-12 11:16 UTC (History)
5 users (show)

Fixed In Version: python-mock-4.0.3-1.fc36
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2022-01-12 11:16:08 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Tomáš Hrnčiar 2021-11-01 13:22:12 UTC
python-mock fails to build with Python 3.11.0a1.

=================================== FAILURES ===================================
________ TestMockingMagicMethods.test_setting_unsupported_magic_method _________

self = <mock.tests.testmagicmethods.TestMockingMagicMethods testMethod=test_setting_unsupported_magic_method>

    def test_setting_unsupported_magic_method(self):
        mock = MagicMock()
        def set_setattr():
            mock.__setattr__ = lambda self, name: None
>       self.assertRaisesRegexp(AttributeError,
            "Attempting to set unsupported magic method '__setattr__'.",
            set_setattr
        )
E       AttributeError: 'TestMockingMagicMethods' object has no attribute 'assertRaisesRegexp'

mock/tests/testmagicmethods.py:428: AttributeError
___________________ MockTest.test_assert_called_once_message ___________________

self = <mock.tests.testmock.MockTest testMethod=test_assert_called_once_message>

    def test_assert_called_once_message(self):
        m = Mock()
        m(1, 2)
        m(3)
>       self.assertRaisesRegexp(AssertionError,
            re.escape("Calls: [call(1, 2), call(3)]"),
            m.assert_called_once)
E       AttributeError: 'MockTest' object has no attribute 'assertRaisesRegexp'

mock/tests/testmock.py:1569: AttributeError
_______________ MockTest.test_assert_called_once_with_call_list ________________

self = <mock.tests.testmock.MockTest testMethod=test_assert_called_once_with_call_list>

    def test_assert_called_once_with_call_list(self):
        m = Mock()
        m(1)
        m(2)
>       self.assertRaisesRegexp(AssertionError,
            re.escape("Calls: [call(1), call(2)]"),
            lambda: m.assert_called_once_with(2))
E       AttributeError: 'MockTest' object has no attribute 'assertRaisesRegexp'

mock/tests/testmock.py:438: AttributeError
________________ MockTest.test_assert_called_once_with_message _________________

self = <mock.tests.testmock.MockTest testMethod=test_assert_called_once_with_message>

    def test_assert_called_once_with_message(self):
        mock = Mock(name='geoffrey')
>       self.assertRaisesRegexp(AssertionError,
                     r"Expected 'geoffrey' to be called once\.",
                     mock.assert_called_once_with)
E       AttributeError: 'MockTest' object has no attribute 'assertRaisesRegexp'

mock/tests/testmock.py:747: AttributeError
___________________ MockTest.test_assert_called_with_message ___________________

self = <mock.tests.testmock.MockTest testMethod=test_assert_called_with_message>

    def test_assert_called_with_message(self):
        mock = Mock()
>       self.assertRaisesRegexp(AssertionError, 'not called',
                                mock.assert_called_with)
E       AttributeError: 'MockTest' object has no attribute 'assertRaisesRegexp'

mock/tests/testmock.py:741: AttributeError
___________________ MockTest.test_assert_not_called_message ____________________

self = <mock.tests.testmock.MockTest testMethod=test_assert_not_called_message>

    def test_assert_not_called_message(self):
        m = Mock()
        m(1, 2)
>       self.assertRaisesRegexp(AssertionError,
            re.escape("Calls: [call(1, 2)]"),
            m.assert_not_called)
E       AttributeError: 'MockTest' object has no attribute 'assertRaisesRegexp'

mock/tests/testmock.py:1540: AttributeError
_________________ MockTest.test_autospec_side_effect_exception _________________

self = <mock.tests.testmock.MockTest testMethod=test_autospec_side_effect_exception>

    def test_autospec_side_effect_exception(self):
        # Test for issue 23661
        def f(): pass
    
        mock = create_autospec(f)
        mock.side_effect = ValueError('Bazinga!')
>       self.assertRaisesRegexp(ValueError, 'Bazinga!', mock)
E       AttributeError: 'MockTest' object has no attribute 'assertRaisesRegexp'

mock/tests/testmock.py:218: AttributeError
___________________________ MockTest.test_from_spec ____________________________

self = <mock.tests.testmock.MockTest testMethod=test_from_spec>

    def test_from_spec(self):
        class Something(object):
            x = 3
            __something__ = None
            def y(self): pass
    
        def test_attributes(mock):
            # should work
            mock.x
            mock.y
            mock.__something__
            self.assertRaisesRegexp(
                AttributeError,
                "Mock object has no attribute 'z'",
                getattr, mock, 'z'
            )
            self.assertRaisesRegexp(
                AttributeError,
                "Mock object has no attribute '__foobar__'",
                getattr, mock, '__foobar__'
            )
    
>       test_attributes(Mock(spec=Something))

mock/tests/testmock.py:567: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

mock = <Mock spec='Something' id='139979481356256'>

    def test_attributes(mock):
        # should work
        mock.x
        mock.y
        mock.__something__
>       self.assertRaisesRegexp(
            AttributeError,
            "Mock object has no attribute 'z'",
            getattr, mock, 'z'
        )
E       AttributeError: 'MockTest' object has no attribute 'assertRaisesRegexp'

mock/tests/testmock.py:556: AttributeError
______________________ MockTest.test_mock_call_repr_loop _______________________

self = <mock.tests.testmock.MockTest testMethod=test_mock_call_repr_loop>

    def test_mock_call_repr_loop(self):
        m = Mock()
        m.foo = m
        repr(m.foo())
>       self.assertRegexpMatches(repr(m.foo()), r"<Mock name='mock\(\)' id='\d+'>")
E       AttributeError: 'MockTest' object has no attribute 'assertRegexpMatches'

mock/tests/testmock.py:1183: AttributeError
___________________ MockTest.test_only_allowed_methods_exist ___________________

self = <mock.tests.testmock.MockTest testMethod=test_only_allowed_methods_exist>

    def test_only_allowed_methods_exist(self):
        for spec in ['something'], ('something',):
            for arg in 'spec', 'spec_set':
                mock = Mock(**{arg: spec})
    
                # this should be allowed
                mock.something
>               self.assertRaisesRegexp(
                    AttributeError,
                    "Mock object has no attribute 'something_else'",
                    getattr, mock, 'something_else'
                )
E               AttributeError: 'MockTest' object has no attribute 'assertRaisesRegexp'

mock/tests/testmock.py:538: AttributeError
=========================== short test summary info ============================
FAILED mock/tests/testmagicmethods.py::TestMockingMagicMethods::test_setting_unsupported_magic_method
FAILED mock/tests/testmock.py::MockTest::test_assert_called_once_message - At...
FAILED mock/tests/testmock.py::MockTest::test_assert_called_once_with_call_list
FAILED mock/tests/testmock.py::MockTest::test_assert_called_once_with_message
FAILED mock/tests/testmock.py::MockTest::test_assert_called_with_message - At...
FAILED mock/tests/testmock.py::MockTest::test_assert_not_called_message - Att...
FAILED mock/tests/testmock.py::MockTest::test_autospec_side_effect_exception
FAILED mock/tests/testmock.py::MockTest::test_from_spec - AttributeError: 'Mo...
FAILED mock/tests/testmock.py::MockTest::test_mock_call_repr_loop - Attribute...
FAILED mock/tests/testmock.py::MockTest::test_only_allowed_methods_exist - At...
================== 10 failed, 387 passed, 9 skipped in 1.42s ===================

In Python 3.11 many old deprecated unittest features are removed:

    TestCase method aliases failUnlessEqual, failIfEqual, failUnless, failIf, failUnlessRaises, failUnlessAlmostEqual, failIfAlmostEqual (deprecated in Python 3.1), assertEquals, assertNotEquals, assert_, assertAlmostEquals, assertNotAlmostEquals, assertRegexpMatches, assertRaisesRegexp (deprecated in Python 3.2), and assertNotRegexpMatches (deprecated in Python 3.5).

    Undocumented and broken TestCase method assertDictContainsSubset (deprecated in Python 3.2).

    Undocumented <unittest.TestLoader.loadTestsFromModule> TestLoader.loadTestsFromModule() parameter use_load_tests (deprecated and ignored since Python 3.2).

    An alias of the TextTestResult class: _TextTestResult (deprecated in Python 3.2).

(Contributed by Serhiy Storchaka in bpo-45162.)

https://docs.python.org/3.11/whatsnew/3.11.html

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.11/fedora-rawhide-x86_64/02910274-python-mock/

For all our attempts to build python-mock with Python 3.11, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.11/package/python-mock/

Testing and mass rebuild of packages is happening in copr. You can follow these instructions to test locally in mock if your package builds with Python 3.11:
https://copr.fedorainfracloud.org/coprs/g/python/python3.11/

Let us know here if you have any questions.

Python 3.11 is already included in Fedora 36. To make that update smoother, we're building Fedora packages with all pre-releases of Python 3.11.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires), so if this package is required a lot, it's important for us to get it fixed soon.
We'd appreciate help from the people who know this package best, but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 2 Miro Hrončok 2022-01-06 11:40:42 UTC
I haven't been updating mock in Fedora as it is deprecated there: https://fedoraproject.org/wiki/Changes/DeprecatePythonMock

Maybe we should do it to unblock this and if it breaks some packages, migrate them to the standard library.

Comment 4 Fedora Update System 2022-01-12 11:14:34 UTC
FEDORA-2022-2f5141c1dd has been submitted as an update to Fedora 36. https://bodhi.fedoraproject.org/updates/FEDORA-2022-2f5141c1dd

Comment 5 Fedora Update System 2022-01-12 11:16:08 UTC
FEDORA-2022-2f5141c1dd has been pushed to the Fedora 36 stable repository.
If problem still persists, please make note of it in this bug report.


Note You need to log in before you can comment on or make changes to this bug.