blob: 1f7b7b638448fb27358d5a4f0cd31e11ddd411b6 [file] [log] [blame]
.. _`noseintegration`:
Running tests written for nose
.. include::
``pytest`` has basic support for running tests written for nose_.
.. _nosestyle:
After :ref:`installation` type::
python develop # make sure tests can import our package
pytest # instead of 'nosetests'
and you should be able to run your nose style tests and
make use of pytest's capabilities.
Supported nose Idioms
* setup and teardown at module/class/method level
* SkipTest exceptions and markers
* setup/teardown decorators
* ``yield``-based tests and their setup (considered deprecated as of pytest 3.0)
* ``__test__`` attribute on modules/classes/functions
* general usage of nose utilities
Unsupported idioms / known issues
- unittest-style ``setUp, tearDown, setUpClass, tearDownClass``
are recognized only on ``unittest.TestCase`` classes but not
on plain classes. ``nose`` supports these methods also on plain
classes but pytest deliberately does not. As nose and pytest already
both support ``setup_class, teardown_class, setup_method, teardown_method``
it doesn't seem useful to duplicate the unittest-API like nose does.
If you however rather think pytest should support the unittest-spelling on
plain classes please post `to this issue
- nose imports test modules with the same import path (e.g.
``tests.test_mod``) but different file system paths
(e.g. ``tests/`` and ``other/tests/``)
by extending sys.path/import semantics. pytest does not do that
but there is discussion in `#268 <>`_ for adding some support. Note that
`nose2 choose to avoid this sys.path/import hackery <>`_.
If you place a file in the root directory of your project
(as determined by pytest) pytest will run tests "nose style" against
the code below that directory by adding it to your ``sys.path`` instead of
running against your installed code.
You may find yourself wanting to do this if you ran ``python install``
to set up your project, as opposed to ``python develop`` or any of
the package manager equivalents. Installing with develop in a
virtual environment like tox is recommended over this pattern.
- nose-style doctests are not collected and executed correctly,
also doctest fixtures don't work.
- no nose-configuration is recognized.
- ``yield``-based methods don't support ``setup`` properly because
the ``setup`` method is always called in the same class instance.
There are no plans to fix this currently because ``yield``-tests
are deprecated in pytest 3.0, with ``pytest.mark.parametrize``
being the recommended alternative.