100 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
| 
 | |
| .. _`classic xunit`:
 | |
| .. _xunitsetup:
 | |
| 
 | |
| classic xunit-style setup
 | |
| ========================================
 | |
| 
 | |
| This section describes a classic and popular way how you can implement
 | |
| fixtures (setup and teardown test state) on a per-module/class/function basis.
 | |
| 
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|     While these setup/teardown methods are simple and familiar to those
 | |
|     coming from a ``unittest`` or nose ``background``, you may also consider
 | |
|     using pytest's more powerful :ref:`fixture mechanism
 | |
|     <fixture>` which leverages the concept of dependency injection, allowing
 | |
|     for a more modular and more scalable approach for managing test state,
 | |
|     especially for larger projects and for functional testing.  You can
 | |
|     mix both fixture mechanisms in the same file but
 | |
|     test methods of ``unittest.TestCase`` subclasses
 | |
|     cannot receive fixture arguments.
 | |
| 
 | |
| 
 | |
| Module level setup/teardown
 | |
| --------------------------------------
 | |
| 
 | |
| If you have multiple test functions and test classes in a single
 | |
| module you can optionally implement the following fixture methods
 | |
| which will usually be called once for all the functions::
 | |
| 
 | |
|     def setup_module(module):
 | |
|         """ setup 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.
 | |
|         """
 | |
| 
 | |
| As of pytest-3.0, the ``module`` parameter is optional.
 | |
| 
 | |
| Class level setup/teardown
 | |
| ----------------------------------
 | |
| 
 | |
| Similarly, the following methods are called at class level before
 | |
| and after all test methods of the class are called::
 | |
| 
 | |
|     @classmethod
 | |
|     def setup_class(cls):
 | |
|         """ setup any state specific to the execution of the given class (which
 | |
|         usually contains tests).
 | |
|         """
 | |
| 
 | |
|     @classmethod
 | |
|     def teardown_class(cls):
 | |
|         """ teardown any state that was previously setup with a call to
 | |
|         setup_class.
 | |
|         """
 | |
| 
 | |
| Method and function level setup/teardown
 | |
| -----------------------------------------------
 | |
| 
 | |
| Similarly, the following methods are called around each method invocation::
 | |
| 
 | |
|     def setup_method(self, method):
 | |
|         """ setup 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.
 | |
|         """
 | |
| 
 | |
| As of pytest-3.0, the ``method`` parameter is optional.
 | |
| 
 | |
| If you would rather define test functions directly at module level
 | |
| you can also use the following functions to implement fixtures::
 | |
| 
 | |
|     def setup_function(function):
 | |
|         """ setup any state tied to the execution of the given function.
 | |
|         Invoked for every test function in the module.
 | |
|         """
 | |
| 
 | |
|     def teardown_function(function):
 | |
|         """ teardown any state that was previously setup with a setup_function
 | |
|         call.
 | |
|         """
 | |
| 
 | |
| As of pytest-3.0, the ``function`` parameter is optional.
 | |
| 
 | |
| Remarks:
 | |
| 
 | |
| * It is possible for setup/teardown pairs to be invoked multiple times
 | |
|   per testing process.
 | |
| * teardown functions are not called if the corresponding setup function existed
 | |
|   and failed/was skipped.
 | |
| 
 | |
| .. _`unittest.py module`: http://docs.python.org/library/unittest.html
 |