diff --git a/django/test/testcases.py b/django/test/testcases.py index 65664a1f50..764ba41371 100644 --- a/django/test/testcases.py +++ b/django/test/testcases.py @@ -576,13 +576,16 @@ class TestCase(TransactionTestCase): connection.close() def _deferredSkip(condition, reason): - def decorator(test_item): - if not (isinstance(test_item, type) and issubclass(test_item, TestCase)): - @wraps(test_item) + def decorator(test_func): + if not (isinstance(test_func, type) and issubclass(test_func, TestCase)): + @wraps(test_func) def skip_wrapper(*args, **kwargs): if condition(): raise unittest.SkipTest(reason) + return test_func(*args, **kwargs) test_item = skip_wrapper + else: + test_item = test_func test_item.__unittest_skip_why__ = reason return test_item return decorator diff --git a/tests/regressiontests/test_utils/tests.py b/tests/regressiontests/test_utils/tests.py index 4f92a402cc..a8106ed6e6 100644 --- a/tests/regressiontests/test_utils/tests.py +++ b/tests/regressiontests/test_utils/tests.py @@ -1,9 +1,23 @@ import sys +from django.test import TestCase, skipUnlessDBFeature, skipIfDBFeature + + if sys.version_info >= (2, 5): from python_25 import AssertNumQueriesTests +class SkippingTestCase(TestCase): + def test_skip_unless_db_feature(self): + "A test that might be skipped is actually called." + # Total hack, but it works, just want an attribute that's always true. + @skipUnlessDBFeature("__class__") + def test_func(): + raise ValueError + + self.assertRaises(ValueError, test_func) + + __test__ = {"API_TEST": r""" # Some checks of the doctest output normalizer. # Standard doctests do fairly