mirror of https://github.com/django/django.git
Fixed #23289 -- Added mock as a test dependency.
This commit is contained in:
parent
43fcf3505e
commit
82e4f956e3
|
@ -16,3 +16,12 @@ __all__ = [
|
||||||
'skipUnlessDBFeature', 'modify_settings', 'override_settings',
|
'skipUnlessDBFeature', 'modify_settings', 'override_settings',
|
||||||
'override_system_checks'
|
'override_system_checks'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# To simplify Django's test suite; not meant as a public API
|
||||||
|
try:
|
||||||
|
from unittest import mock # NOQA
|
||||||
|
except ImportError:
|
||||||
|
try:
|
||||||
|
import mock # NOQA
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
|
@ -24,6 +24,11 @@ Running the unit tests
|
||||||
Quickstart
|
Quickstart
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
If you are on Python < 3.3, you'll first need to install a backport of the
|
||||||
|
``unittest.mock`` module that's available in Python 3.3+. See
|
||||||
|
:ref:`running-unit-tests-dependencies` for details on installing `mock`_ and
|
||||||
|
the other optional test dependencies.
|
||||||
|
|
||||||
Running the tests requires a Django settings module that defines the
|
Running the tests requires a Django settings module that defines the
|
||||||
databases to use. To make it easy to get started, Django provides and uses a
|
databases to use. To make it easy to get started, Django provides and uses a
|
||||||
sample settings module that uses the SQLite database. To run the tests:
|
sample settings module that uses the SQLite database. To run the tests:
|
||||||
|
@ -166,6 +171,7 @@ dependencies:
|
||||||
* pytz_
|
* pytz_
|
||||||
* setuptools_
|
* setuptools_
|
||||||
* memcached_, plus a :ref:`supported Python binding <memcached>`
|
* memcached_, plus a :ref:`supported Python binding <memcached>`
|
||||||
|
* mock_ (for Python < 3.3)
|
||||||
* gettext_ (:ref:`gettext_on_windows`)
|
* gettext_ (:ref:`gettext_on_windows`)
|
||||||
* selenium_
|
* selenium_
|
||||||
* sqlparse_
|
* sqlparse_
|
||||||
|
@ -176,7 +182,7 @@ like so:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ pip install -r tests/requirements/py2.txt # Python 3: py3.txt
|
$ pip install -r tests/requirements/py3.txt # Python 2: py2.txt
|
||||||
|
|
||||||
You can also install the database adapter(s) of your choice using
|
You can also install the database adapter(s) of your choice using
|
||||||
``oracle.txt``, ``mysql.txt``, or ``postgres.txt``.
|
``oracle.txt``, ``mysql.txt``, or ``postgres.txt``.
|
||||||
|
@ -198,6 +204,7 @@ associated tests will be skipped.
|
||||||
.. _pytz: https://pypi.python.org/pypi/pytz/
|
.. _pytz: https://pypi.python.org/pypi/pytz/
|
||||||
.. _setuptools: https://pypi.python.org/pypi/setuptools/
|
.. _setuptools: https://pypi.python.org/pypi/setuptools/
|
||||||
.. _memcached: http://memcached.org/
|
.. _memcached: http://memcached.org/
|
||||||
|
.. _mock: https://pypi.python.org/pypi/mock
|
||||||
.. _gettext: http://www.gnu.org/software/gettext/manual/gettext.html
|
.. _gettext: http://www.gnu.org/software/gettext/manual/gettext.html
|
||||||
.. _selenium: https://pypi.python.org/pypi/selenium
|
.. _selenium: https://pypi.python.org/pypi/selenium
|
||||||
.. _sqlparse: https://pypi.python.org/pypi/sqlparse
|
.. _sqlparse: https://pypi.python.org/pypi/sqlparse
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
To run the test suite::
|
To run the test suite::
|
||||||
|
|
||||||
|
$ cd tests
|
||||||
|
$ pip install -r requirements/py3.txt # or py2.txt
|
||||||
$ PYTHONPATH=..:$PYTHONPATH ./runtests.py
|
$ PYTHONPATH=..:$PYTHONPATH ./runtests.py
|
||||||
|
|
||||||
For more information about the test suite, see
|
For more information about the test suite, see
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
bcrypt
|
bcrypt
|
||||||
docutils
|
docutils
|
||||||
|
# move to py2.txt when dropping Python 3.2
|
||||||
|
mock
|
||||||
numpy
|
numpy
|
||||||
Pillow
|
Pillow
|
||||||
PyYAML
|
PyYAML
|
||||||
|
|
|
@ -374,6 +374,16 @@ if __name__ == "__main__":
|
||||||
help='Run the Selenium tests as well (if Selenium is installed)')
|
help='Run the Selenium tests as well (if Selenium is installed)')
|
||||||
options = parser.parse_args()
|
options = parser.parse_args()
|
||||||
|
|
||||||
|
# mock is a required dependency
|
||||||
|
try:
|
||||||
|
from django.test import mock # NOQA
|
||||||
|
except ImportError:
|
||||||
|
print(
|
||||||
|
"Please install test dependencies first: \n"
|
||||||
|
"$ pip install -r requirements/py%s.txt" % sys.version_info.major
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
# Allow including a trailing slash on app_labels for tab completion convenience
|
# Allow including a trailing slash on app_labels for tab completion convenience
|
||||||
options.modules = [os.path.normpath(labels) for labels in options.modules]
|
options.modules = [os.path.normpath(labels) for labels in options.modules]
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ from django.conf import settings
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.db.backends.dummy.base import DatabaseCreation
|
from django.db.backends.dummy.base import DatabaseCreation
|
||||||
from django.test import TestCase, TransactionTestCase, skipUnlessDBFeature
|
from django.test import TestCase, TransactionTestCase, mock, skipUnlessDBFeature
|
||||||
from django.test.runner import DiscoverRunner, dependency_ordered
|
from django.test.runner import DiscoverRunner, dependency_ordered
|
||||||
from django.test.testcases import connections_support_transactions
|
from django.test.testcases import connections_support_transactions
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
|
@ -129,13 +129,10 @@ class DependencyOrderingTests(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
class MockTestRunner(object):
|
class MockTestRunner(object):
|
||||||
invoked = False
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def run_tests(self, test_labels, extra_tests=None, **kwargs):
|
MockTestRunner.run_tests = mock.Mock(return_value=[])
|
||||||
MockTestRunner.invoked = True
|
|
||||||
|
|
||||||
|
|
||||||
class ManageCommandTests(unittest.TestCase):
|
class ManageCommandTests(unittest.TestCase):
|
||||||
|
@ -143,8 +140,7 @@ class ManageCommandTests(unittest.TestCase):
|
||||||
def test_custom_test_runner(self):
|
def test_custom_test_runner(self):
|
||||||
call_command('test', 'sites',
|
call_command('test', 'sites',
|
||||||
testrunner='test_runner.tests.MockTestRunner')
|
testrunner='test_runner.tests.MockTestRunner')
|
||||||
self.assertTrue(MockTestRunner.invoked,
|
MockTestRunner.run_tests.assert_called_with(('sites',))
|
||||||
"The custom test runner has not been invoked")
|
|
||||||
|
|
||||||
def test_bad_test_runner(self):
|
def test_bad_test_runner(self):
|
||||||
with self.assertRaises(AttributeError):
|
with self.assertRaises(AttributeError):
|
||||||
|
|
Loading…
Reference in New Issue