55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
 | |
| Working Examples
 | |
| ================
 | |
| 
 | |
| managing state at module, class and method level 
 | |
| ------------------------------------------------------------
 | |
| 
 | |
| Here is a working example for what goes on when you setup modules, 
 | |
| classes and methods:: 
 | |
| 
 | |
|     # [[from py/documentation/example/pytest/test_setup_flow_example.py]]
 | |
| 
 | |
|     def setup_module(module):
 | |
|         module.TestStateFullThing.classcount = 0
 | |
| 
 | |
|     class TestStateFullThing:
 | |
|         def setup_class(cls):
 | |
|             cls.classcount += 1
 | |
| 
 | |
|         def teardown_class(cls):
 | |
|             cls.classcount -= 1
 | |
| 
 | |
|         def setup_method(self, method):
 | |
|             self.id = eval(method.func_name[5:])
 | |
| 
 | |
|         def test_42(self):
 | |
|             assert self.classcount == 1
 | |
|             assert self.id == 42
 | |
| 
 | |
|         def test_23(self):
 | |
|             assert self.classcount == 1
 | |
|             assert self.id == 23
 | |
| 
 | |
|     def teardown_module(module):
 | |
|         assert module.TestStateFullThing.classcount == 0
 | |
| 
 | |
| For this example the control flow happens as follows::
 | |
| 
 | |
|     import test_setup_flow_example
 | |
|     setup_module(test_setup_flow_example)
 | |
|        setup_class(TestStateFullThing) 
 | |
|            instance = TestStateFullThing()
 | |
|            setup_method(instance, instance.test_42) 
 | |
|               instance.test_42()
 | |
|            setup_method(instance, instance.test_23) 
 | |
|               instance.test_23()
 | |
|        teardown_class(TestStateFullThing) 
 | |
|     teardown_module(test_setup_flow_example)
 | |
| 
 | |
| Note that ``setup_class(TestStateFullThing)`` is called and not 
 | |
| ``TestStateFullThing.setup_class()`` which would require you
 | |
| to insert ``setup_class = classmethod(setup_class)`` to make
 | |
| your setup function callable. Did we mention that lazyness
 | |
| is a virtue? 
 |