|
|
.. _testing:
|
|
|
|
|
|
=========================
|
|
|
Writing and running tests
|
|
|
=========================
|
|
|
|
|
|
Overview
|
|
|
========
|
|
|
|
|
|
It is extremely important that all code contributed to IPython has tests.
|
|
|
Tests should be written as unittests, doctests or other entities that the
|
|
|
IPython test system can detect. See below for more details on this.
|
|
|
|
|
|
Each subpackage in IPython should have its own :file:`tests` directory that
|
|
|
contains all of the tests for that subpackage. All of the files in the
|
|
|
:file:`tests` directory should have the word "tests" in them to enable
|
|
|
the testing framework to find them.
|
|
|
|
|
|
If a subpackage has any dependencies beyond the Python standard library, the
|
|
|
tests for that subpackage should be skipped if the dependencies are not found.
|
|
|
This is very important so users don't get tests failing simply because they
|
|
|
don't have dependencies. We are still figuring out the best way for this
|
|
|
to be handled.
|
|
|
|
|
|
Status
|
|
|
======
|
|
|
|
|
|
Currently IPython's testing system is being reworked. In the meantime,
|
|
|
we recommend the following testing practices:
|
|
|
|
|
|
* To run regular tests, use the :command:`nosetests` command that Nose [Nose]_
|
|
|
provides on a per file basis:
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
nosetests -vvs IPython.core.tests.test_component
|
|
|
|
|
|
* To run Twisted-using tests, use the :command:`trial` command on a per file
|
|
|
basis:
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
trial IPython.kernel
|
|
|
|
|
|
* For now, regular tests (of non-Twisted using code) should be written as
|
|
|
unit tests. They should be subclasses of :class:`unittest.TestCase`.
|
|
|
|
|
|
* Tests of Twisted [Twisted]_ using code should be written by subclassing the
|
|
|
``TestCase`` class that comes with ``twisted.trial.unittest``. Furthermore,
|
|
|
all :class:`Deferred` instances that are created in the test must be
|
|
|
properly chained and the final one *must* be the return value of the test
|
|
|
method.
|
|
|
|
|
|
.. [Nose] Nose: a discovery based unittest extension. http://code.google.com/p/python-nose/
|
|
|
|