mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	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:
		| @@ -210,6 +210,10 @@ class DocTestRunner(doctest.DocTestRunner): | ||||
|             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 @@ class TransactionTestCase(unittest.TestCase): | ||||
|         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): | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -457,3 +457,15 @@ class CSRFEnabledClientTests(TestCase): | ||||
|         # 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) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user