Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #18417 -- Raised exception when unittest.TestCase is decorated …

…with override_settings
  • Loading branch information...
commit 9f7cefd5059e78d75f1e1a852b51a6286ecec728 1 parent f3a0ecc
@claudep claudep authored
View
6 django/test/utils.py
@@ -188,7 +188,11 @@ def __exit__(self, exc_type, exc_value, traceback):
def __call__(self, test_func):
from django.test import TransactionTestCase
- if isinstance(test_func, type) and issubclass(test_func, TransactionTestCase):
+ if isinstance(test_func, type):
+ if not issubclass(test_func, TransactionTestCase):
+ raise Exception(
+ "Only subclasses of Django TransactionTestCase can be decorated "
+ "with override_settings")
original_pre_setup = test_func._pre_setup
original_post_teardown = test_func._post_teardown
View
24 tests/regressiontests/settings_tests/tests.py
@@ -6,6 +6,7 @@
from django.http import HttpRequest
from django.test import TransactionTestCase, TestCase, signals
from django.test.utils import override_settings
+from django.utils import unittest, six
@override_settings(TEST='override')
@@ -67,11 +68,6 @@ def test_max_recursion_error(self):
self.fail()
-class SettingGetter(object):
- def __init__(self):
- self.test = getattr(settings, 'TEST', 'undefined')
-
-
class SettingsTests(TestCase):
def setUp(self):
self.testvalue = None
@@ -122,10 +118,20 @@ def test_context_manager(self):
self.assertRaises(AttributeError, getattr, settings, 'TEST')
def test_class_decorator(self):
- self.assertEqual(SettingGetter().test, 'undefined')
- DecoratedSettingGetter = override_settings(TEST='override')(SettingGetter)
- self.assertEqual(DecoratedSettingGetter().test, 'override')
- self.assertRaises(AttributeError, getattr, settings, 'TEST')
+ # TransactionTestCase can be decorated by override_settings, but not ut.TestCase
+ class TransactionTestCaseSubclass(TransactionTestCase):
+ pass
+
+ class UnittestTestCaseSubclass(unittest.TestCase):
+ pass
+
+ decorated = override_settings(TEST='override')(TransactionTestCaseSubclass)
+ self.assertIsInstance(decorated, type)
+ self.assertTrue(issubclass(decorated, TransactionTestCase))
+
+ with six.assertRaisesRegex(self, Exception,
+ "Only subclasses of Django TransactionTestCase*"):
+ decorated = override_settings(TEST='override')(UnittestTestCaseSubclass)
def test_signal_callback_context_manager(self):
self.assertRaises(AttributeError, getattr, settings, 'TEST')
Please sign in to comment.
Something went wrong with that request. Please try again.