Commit b7a73cf9 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

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
parent 816c7d1e
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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):
+24 −0
Original line number Diff line number Diff line
@@ -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
+12 −0
Original line number Diff line number Diff line
@@ -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)