unit-tests.txt 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. ==========
  2. Unit tests
  3. ==========
  4. Django comes with a test suite of its own, in the ``tests`` directory of the
  5. code base. It's our policy to make sure all tests pass at all times.
  6. The tests cover:
  7. * Models and the database API (``tests/modeltests``),
  8. * Everything else in core Django code (``tests/regressiontests``),
  9. * :ref:`contrib-apps` (``django/contrib/<app>/tests``).
  10. We appreciate any and all contributions to the test suite!
  11. The Django tests all use the testing infrastructure that ships with Django for
  12. testing applications. See :doc:`Testing Django applications </topics/testing>`
  13. for an explanation of how to write new tests.
  14. .. _running-unit-tests:
  15. Running the unit tests
  16. ----------------------
  17. Quickstart
  18. ~~~~~~~~~~
  19. Running the tests requires a Django settings module that defines the
  20. databases to use. To make it easy to get started, Django provides a
  21. sample settings module that uses the SQLite database. To run the tests
  22. with this sample ``settings`` module, ``cd`` into the Django
  23. ``tests/`` directory and run:
  24. .. code-block:: bash
  25. ./runtests.py --settings=test_sqlite
  26. If you get an ``ImportError: No module named django.contrib`` error,
  27. you need to add your install of Django to your ``PYTHONPATH``. For
  28. more details on how to do this, read
  29. :ref:`pointing-python-at-the-new-django-version`.
  30. Using another ``settings`` module
  31. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  32. The included settings module allows you to run the test suite using
  33. SQLite. If you want to test behavior using a different database (and
  34. if you're proposing patches for Django, it's a good idea to test
  35. across databases), you may need to define your own settings file.
  36. To run the tests with different settings, ``cd`` to the ``tests/`` directory
  37. and type:
  38. .. code-block:: bash
  39. ./runtests.py --settings=path.to.django.settings
  40. The :setting:`DATABASES` setting in this test settings module needs to define
  41. two databases:
  42. * A ``default`` database. This database should use the backend that
  43. you want to use for primary testing
  44. * A database with the alias ``other``. The ``other`` database is
  45. used to establish that queries can be directed to different
  46. databases. As a result, this database can use any backend you
  47. want. It doesn't need to use the same backend as the ``default``
  48. database (although it can use the same backend if you want to).
  49. If you're using a backend that isn't SQLite, you will need to provide other
  50. details for each database:
  51. * The :setting:`USER` option for each of your databases needs to
  52. specify an existing user account for the database.
  53. * The :setting:`PASSWORD` option needs to provide the password for
  54. the :setting:`USER` that has been specified.
  55. * The :setting:`NAME` option must be the name of an existing database to
  56. which the given user has permission to connect. The unit tests will not
  57. touch this database; the test runner creates a new database whose name
  58. is :setting:`NAME` prefixed with ``test_``, and this test database is
  59. deleted when the tests are finished. This means your user account needs
  60. permission to execute ``CREATE DATABASE``.
  61. You will also need to ensure that your database uses UTF-8 as the default
  62. character set. If your database server doesn't use UTF-8 as a default charset,
  63. you will need to include a value for :setting:`TEST_CHARSET` in the settings
  64. dictionary for the applicable database.
  65. Running only some of the tests
  66. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  67. Django's entire test suite takes a while to run, and running every single test
  68. could be redundant if, say, you just added a test to Django that you want to
  69. run quickly without running everything else. You can run a subset of the unit
  70. tests by appending the names of the test modules to ``runtests.py`` on the
  71. command line.
  72. For example, if you'd like to run tests only for generic relations and
  73. internationalization, type:
  74. .. code-block:: bash
  75. ./runtests.py --settings=path.to.settings generic_relations i18n
  76. How do you find out the names of individual tests? Look in
  77. ``tests/modeltests`` and ``tests/regressiontests`` — each directory name
  78. there is the name of a test. Contrib app names are also valid test names.
  79. If you just want to run a particular class of tests, you can specify a list of
  80. paths to individual test classes. For example, to run the ``TranslationTests``
  81. of the ``i18n`` module, type:
  82. .. code-block:: bash
  83. ./runtests.py --settings=path.to.settings i18n.TranslationTests
  84. Going beyond that, you can specify an individual test method like this:
  85. .. code-block:: bash
  86. ./runtests.py --settings=path.to.settings i18n.TranslationTests.test_lazy_objects
  87. Running all the tests
  88. ~~~~~~~~~~~~~~~~~~~~~
  89. If you want to run the full suite of tests, you'll need to install a number of
  90. dependencies:
  91. * PyYAML_
  92. * Markdown_
  93. * Textile_
  94. * Docutils_
  95. * setuptools_
  96. * memcached_, plus a :ref:`supported Python binding <memcached>`
  97. * gettext_ (:ref:`gettext_on_windows`)
  98. If you want to test the memcached cache backend, you'll also need to define
  99. a :setting:`CACHES` setting that points at your memcached instance.
  100. Each of these dependencies is optional. If you're missing any of them, the
  101. associated tests will be skipped.
  102. .. _PyYAML: http://pyyaml.org/wiki/PyYAML
  103. .. _Markdown: http://pypi.python.org/pypi/Markdown/1.7
  104. .. _Textile: http://pypi.python.org/pypi/textile
  105. .. _docutils: http://pypi.python.org/pypi/docutils/0.4
  106. .. _setuptools: http://pypi.python.org/pypi/setuptools/
  107. .. _memcached: http://www.danga.com/memcached/
  108. .. _gettext: http://www.gnu.org/software/gettext/manual/gettext.html
  109. .. _contrib-apps:
  110. Contrib apps
  111. ------------
  112. Tests for contrib apps go in their respective directories under
  113. ``django/contrib``, in a ``tests.py`` file. You can split the tests over
  114. multiple modules by using a ``tests`` directory in the normal Python way.
  115. For the tests to be found, a ``models.py`` file must exist, even if it's empty.
  116. If you have URLs that need to be mapped, put them in ``tests/urls.py``.
  117. To run tests for just one contrib app (e.g. ``markup``), use the same
  118. method as above::
  119. ./runtests.py --settings=settings markup