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.