====================================
extended xUnit style setup
====================================

.. _`funcargs`: funcargs.html
.. _`test parametrization`: funcargs.html#parametrizing-tests
.. _`unittest plugin`: plugin/unittest.html
.. _`xUnit`: http://en.wikipedia.org/wiki/XUnit

Note: 

    Since version 1.0 funcargs_ present the new and 
    more powerful way to manage test setups with larger
    test suites.  *funcargs* also provide flexible 
    `test parametrization`_ which goes way beyond
    what you can do with the xUnit setup/teardown-method 
    patter. 

Python, Java and many other languages have a tradition
of using xUnit_ style testing. This typically 
involves the call of a ``setup`` method before
a test function is run and ``teardown`` after
it finishes.  With ``py.test`` there are three 
scopes for which you can provide setup/teardown
hooks to provide test fixtures: per-module, per-class 
and per-method/function. ``py.test`` will 
discover and call according methods automatically. 

The `unittest plugin`_  also will intregate ``unittest.TestCase`` 
instances into a test run and call respective setup/teardown methods.

All setup/teardown methods are optional.  

The following methods are called at module level if they exist:

.. sourcecode:: python

    def setup_module(module):
        """ setup up any state specific to the execution
            of the given module. 
        """

    def teardown_module(module):
        """ teardown any state that was previously setup 
            with a setup_module method. 
        """

The following hooks are available for test classes:

.. sourcecode:: python

    def setup_class(cls): 
        """ setup up any state specific to the execution
            of the given class (which usually contains tests). 
        """

    def teardown_class(cls): 
        """ teardown any state that was previously setup 
            with a call to setup_class.
        """

    def setup_method(self, method):
        """ setup up any state tied to the execution of the given 
            method in a class.  setup_method is invoked for every 
            test method of a class. 
        """

    def teardown_method(self, method): 
        """ teardown any state that was previously setup 
            with a setup_method call. 
        """

The last two hooks, ``setup_method`` and ``teardown_method``, are
equivalent to ``setUp`` and ``tearDown`` in the Python standard
library's `unittest.py module`_.

Note that it possible that setup/teardown pairs are invoked multiple 
times per testing process. 

.. _`unittest.py module`: http://docs.python.org/library/unittest.html