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?
|