#23841 closed Bug (fixed)
TestCase.assertWarns doesn't work when using django's test runner.
| Reported by: | Matt3o12 | Owned by: | nobody |
|---|---|---|---|
| Component: | Python 3 | Version: | 1.6 |
| Severity: | Normal | Keywords: | |
| Cc: | t.chaumeny@… | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Django's test runner (python manage.py test) doesn't seem to be supporting TestCase.assertWarns using a freshly created project.
There is a testcase where django fails:
from unittest.case import TestCase
import warnings
class TestWarning(TestCase):
def testAssertWarns(self):
# should just pass
with self.assertWarns(UserWarning):
warnings.warn("Hello world.", UserWarning)
def testAssertWarnsRegex(self):
with self.assertWarnsRegex(UserWarning, "Hello world\."):
warnings.warn("Hello world.")
When I run $ python manage.py test, I always end up getting:
======================================================================
ERROR: testAssertWarns (myapp.tests.TestWarning)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/private/tmp/djago/myproj/myapp/tests.py", line 9, in testAssertWarns
with self.assertWarns(UserWarning):
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/unittest/case.py", line 205, in __enter__
for v in sys.modules.values():
RuntimeError: dictionary changed size during iteration
======================================================================
ERROR: testAssertWarnsRegex (myapp.tests.TestWarning)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/private/tmp/djago/myproj/myapp/tests.py", line 13, in testAssertWarnsRegex
with self.assertWarnsRegex(UserWarning, "Hello world\."):
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/unittest/case.py", line 205, in __enter__
for v in sys.modules.values():
RuntimeError: dictionary changed size during iteration
----------------------------------------------------------------------
When I just run $ python -m unittest, these two tests pass. I've tested that on django 1.6 (using python 3.3) and django 1.7 (using python 3.3 and 3.4) and
Change History (2)
comment:1 by , 11 years ago
| Cc: | added |
|---|
comment:2 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
I'm closing this ticket as six upgrade to 1.8.0 has been backported to Django 1.6.9 (see https://github.com/django/django/commit/81477c91f68d7091f8da417a030dd4b9b776b70a). Upgrading Django to that version (once it is released) will most likely resolve your problem.
This seems to be related https://bitbucket.org/gutworth/six/issue/68/assertwarns-and-six. six has been upgraded to 1.8.0 on master and I can't reproduce it (although I can with an older checkout).