Skip to content

[self-tests] cleanup order of TestUrlPatternTestCase #9399

@stanislavlevin

Description

@stanislavlevin

tests/test_testing.py::TestUrlPatternTestCase::test_urlpatterns fails against pytest 8.2.0:

(base) [builder@localhost django-rest-framework]$ python runtests.py tests/test_testing.py::TestUrlPatternTestCase::test_urlpatterns -v 
max_value in DecimalField should be Decimal type.
min_value in DecimalField should be Decimal type.
================================ test session starts =================================
platform linux -- Python 3.12.2, pytest-8.2.0, pluggy-1.5.0 -- /usr/src/RPM/BUILD/django-rest-framework/.tox/venvs/base/bin/python
cachedir: .pytest_cache
django: version: 5.0.4
rootdir: /usr/src/RPM/BUILD/django-rest-framework
configfile: setup.cfg
plugins: cov-4.1.0, django-4.8.0
collected 1 item                                                                     

tests/test_testing.py::TestUrlPatternTestCase::test_urlpatterns PASSED         [100%]
tests/test_testing.py::TestUrlPatternTestCase::test_urlpatterns ERROR          [100%]

======================================= ERRORS =======================================
____________ ERROR at teardown of TestUrlPatternTestCase.test_urlpatterns ____________
tests/test_testing.py:323: in check_urlpatterns
    assert urlpatterns is not cls.urlpatterns
E   AssertionError: assert [<URLPattern ''>] is not [<URLPattern ''>]
E    +  where [<URLPattern ''>] = <class 'tests.test_testing.TestUrlPatternTestCase'>.urlpatterns
------------------------------- Captured stderr setup --------------------------------
Creating test database for alias 'default'...
Creating test database for alias 'secondary'...
------------------------------ Captured stderr teardown ------------------------------
Destroying test database for alias 'default'...
Destroying test database for alias 'secondary'...
================================== warnings summary ==================================
.tox/venvs/base/lib/python3/site-packages/_pytest/config/__init__.py:1448
  /usr/src/RPM/BUILD/django-rest-framework/.tox/venvs/base/lib/python3/site-packages/_pytest/config/__init__.py:1448: PytestConfigWarning: Unknown config option: testspath
  
    self._warn_or_fail_if_strict(f"Unknown config option: {key}\n")

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============================== short test summary info ===============================
ERROR tests/test_testing.py::TestUrlPatternTestCase::test_urlpatterns - AssertionError: assert [<URLPattern ''>] is not [<URLPattern ''>]
======================= 1 passed, 1 warning, 1 error in 0.63s ========================

This was revealed with recent change in pytest (8.2.0):

pytest-dev/pytest#11728: For unittest-based tests, exceptions during class cleanup (as raised by functions registered with TestCase.addClassCleanup) are now reported instead of silently failing.

This is actual problem of the test.

https://docs.python.org/3/library/unittest.html#unittest.TestCase.addClassCleanup

Add a function to be called after tearDownClass() to cleanup resources used during the test class. Functions will be called in reverse order to the order they are added (LIFO).

check_urlpatterns is called before cleanup_url_patterns and fails (problem was hidden by pytest < 8.2.0).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions