Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #14378 -- Made the test client class customizable. Thanks to Ne…

…d Batchelder for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14058 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit b7a73cf9296a2629a45d4b303c2b9207d3c71c40 1 parent 816c7d1
@freakboy3742 freakboy3742 authored
View
6 django/test/testcases.py
@@ -210,6 +210,10 @@ def report_unexpected_exception(self, out, test, example, exc_info):
transaction.rollback_unless_managed(using=conn)
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):
"""Performs any pre-test setup. This includes:
@@ -251,7 +255,7 @@ def __call__(self, result=None):
set up. This means that user-defined Test Cases aren't required to
include a call to super().setUp().
"""
- self.client = Client()
+ self.client = self.client_class()
try:
self._pre_setup()
except (KeyboardInterrupt, SystemExit):
View
24 docs/topics/testing.txt
@@ -1086,6 +1086,30 @@ This means, instead of instantiating a ``Client`` in each test::
response = self.client.get('/customer/index/')
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:
Fixture loading
View
12 tests/modeltests/test_client/models.py
@@ -457,3 +457,15 @@ def test_csrf_enabled_client(self):
# The CSRF-enabled client rejects it
response = csrf_client.post('/test_client/post_view/', {})
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)
+
Please sign in to comment.
Something went wrong with that request. Please try again.