Author: russellm
Date: 2010-10-08 23:50:47 -0500 (Fri, 08 Oct 2010)
New Revision: 14058

Modified:
   django/trunk/django/test/testcases.py
   django/trunk/docs/topics/testing.txt
   django/trunk/tests/modeltests/test_client/models.py
Log:
Fixed #14378 -- Made the test client class customizable. Thanks to Ned 
Batchelder for the patch.

Modified: django/trunk/django/test/testcases.py
===================================================================
--- django/trunk/django/test/testcases.py       2010-10-09 04:10:39 UTC (rev 
14057)
+++ django/trunk/django/test/testcases.py       2010-10-09 04:50:47 UTC (rev 
14058)
@@ -210,6 +210,10 @@
             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 @@
         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):

Modified: django/trunk/docs/topics/testing.txt
===================================================================
--- django/trunk/docs/topics/testing.txt        2010-10-09 04:10:39 UTC (rev 
14057)
+++ django/trunk/docs/topics/testing.txt        2010-10-09 04:50:47 UTC (rev 
14058)
@@ -1086,6 +1086,30 @@
             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

Modified: django/trunk/tests/modeltests/test_client/models.py
===================================================================
--- django/trunk/tests/modeltests/test_client/models.py 2010-10-09 04:10:39 UTC 
(rev 14057)
+++ django/trunk/tests/modeltests/test_client/models.py 2010-10-09 04:50:47 UTC 
(rev 14058)
@@ -457,3 +457,15 @@
         # 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)
+

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to