Skip to content

Commit

Permalink
tests: Check urlpatterns after cleanups (#9400)
Browse files Browse the repository at this point in the history
According to docs:
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).

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.

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

`doClassCleanups` can be used instead to check after-cleanup state:

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

> This method is called unconditionally after tearDownClass(), or after
  setUpClass() if setUpClass() raises an exception.

  It is responsible for calling all the cleanup functions added by
  addClassCleanup(). If you need cleanup functions to be called prior to
  tearDownClass() then you can call doClassCleanups() yourself.

Fixes: #9399

Signed-off-by: Stanislav Levin <slev@altlinux.org>
  • Loading branch information
stanislavlevin committed May 7, 2024
1 parent 9d4ed05 commit 36d5c0e
Showing 1 changed file with 5 additions and 8 deletions.
13 changes: 5 additions & 8 deletions tests/test_testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,10 +318,6 @@ def test_empty_request_content_type(self):
assert request.META['CONTENT_TYPE'] == 'application/json'


def check_urlpatterns(cls):
assert urlpatterns is not cls.urlpatterns


class TestUrlPatternTestCase(URLPatternsTestCase):
urlpatterns = [
path('', view),
Expand All @@ -333,10 +329,11 @@ def setUpClass(cls):
super().setUpClass()
assert urlpatterns is cls.urlpatterns

cls.addClassCleanup(
check_urlpatterns,
cls
)
@classmethod
def doClassCleanups(cls):
assert urlpatterns is cls.urlpatterns
super().doClassCleanups()
assert urlpatterns is not cls.urlpatterns

def test_urlpatterns(self):
assert self.client.get('/').status_code == 200
Expand Down

0 comments on commit 36d5c0e

Please sign in to comment.