Fixed #14378 -- Made the test client class customizable. Thanks to Ned Batchelder for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14058 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
816c7d1e64
commit
b7a73cf929
|
@ -210,6 +210,10 @@ class DocTestRunner(doctest.DocTestRunner):
|
||||||
transaction.rollback_unless_managed(using=conn)
|
transaction.rollback_unless_managed(using=conn)
|
||||||
|
|
||||||
class TransactionTestCase(unittest.TestCase):
|
class TransactionTestCase(unittest.TestCase):
|
||||||
|
# The class we'll use for the test client self.client.
|
||||||
|
# Can be overridden in derived classes.
|
||||||
|
client_class = Client
|
||||||
|
|
||||||
def _pre_setup(self):
|
def _pre_setup(self):
|
||||||
"""Performs any pre-test setup. This includes:
|
"""Performs any pre-test setup. This includes:
|
||||||
|
|
||||||
|
@ -251,7 +255,7 @@ class TransactionTestCase(unittest.TestCase):
|
||||||
set up. This means that user-defined Test Cases aren't required to
|
set up. This means that user-defined Test Cases aren't required to
|
||||||
include a call to super().setUp().
|
include a call to super().setUp().
|
||||||
"""
|
"""
|
||||||
self.client = Client()
|
self.client = self.client_class()
|
||||||
try:
|
try:
|
||||||
self._pre_setup()
|
self._pre_setup()
|
||||||
except (KeyboardInterrupt, SystemExit):
|
except (KeyboardInterrupt, SystemExit):
|
||||||
|
|
|
@ -1086,6 +1086,30 @@ This means, instead of instantiating a ``Client`` in each test::
|
||||||
response = self.client.get('/customer/index/')
|
response = self.client.get('/customer/index/')
|
||||||
self.failUnlessEqual(response.status_code, 200)
|
self.failUnlessEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
Customizing the test client
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. versionadded:: 1.3
|
||||||
|
|
||||||
|
.. attribute:: TestCase.client_class
|
||||||
|
|
||||||
|
If you want to use a different Client class (for example, a subclass
|
||||||
|
with customized behavior), you can use the
|
||||||
|
:attr:`~TestCase.client_class` class attribute to specify a custom
|
||||||
|
``Client`` class in your test case::
|
||||||
|
|
||||||
|
from django.test import TestCase
|
||||||
|
from django.test.client import Client
|
||||||
|
|
||||||
|
class MyTestClient(Client):
|
||||||
|
# .. specialized methods for your environment ..
|
||||||
|
|
||||||
|
class MyTest(TestCase):
|
||||||
|
client_class = MyTestClient
|
||||||
|
|
||||||
|
def test_my_stuff(self):
|
||||||
|
# .. Here self.client is an instance of MyTestClient ..
|
||||||
|
|
||||||
.. _topics-testing-fixtures:
|
.. _topics-testing-fixtures:
|
||||||
|
|
||||||
Fixture loading
|
Fixture loading
|
||||||
|
|
|
@ -457,3 +457,15 @@ class CSRFEnabledClientTests(TestCase):
|
||||||
# The CSRF-enabled client rejects it
|
# The CSRF-enabled client rejects it
|
||||||
response = csrf_client.post('/test_client/post_view/', {})
|
response = csrf_client.post('/test_client/post_view/', {})
|
||||||
self.assertEqual(response.status_code, 403)
|
self.assertEqual(response.status_code, 403)
|
||||||
|
|
||||||
|
|
||||||
|
class CustomTestClient(Client):
|
||||||
|
i_am_customized = "Yes"
|
||||||
|
|
||||||
|
class CustomTestClientTest(TestCase):
|
||||||
|
client_class = CustomTestClient
|
||||||
|
|
||||||
|
def test_custom_test_client(self):
|
||||||
|
"""A test case can specify a custom class for self.client."""
|
||||||
|
self.assertEqual(hasattr(self.client, "i_am_customized"), True)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue