unit-tests.txt 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. ==========
  2. Unit tests
  3. ==========
  4. Django comes with a test suite of its own, in the ``tests`` directory of the
  5. Django tarball. 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. * Contrib apps (``django/contrib/<contribapp>/tests``, see below)
  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 ``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.
  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. ------------
  111. Tests for apps in ``django/contrib/`` go in their respective directories under
  112. ``django/contrib/``, in a ``tests.py`` file. (You can split the tests over
  113. multiple modules by using a ``tests`` directory in the normal Python way.)
  114. For the tests to be found, a ``models.py`` file must exist (it doesn't
  115. have to have anything in it). If you have URLs that need to be
  116. 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