pytest2/py/test/testing/test_fixture_and_setup.py

212 lines
6.3 KiB
Python

#
# test correct setup/teardowns at
# module, class, and instance level
def test_module_and_function_setup(testdir):
sorter = testdir.inline_runsource("""
modlevel = []
def setup_module(module):
assert not modlevel
module.modlevel.append(42)
def teardown_module(module):
modlevel.pop()
def setup_function(function):
function.answer = 17
def teardown_function(function):
del function.answer
def test_modlevel():
assert modlevel[0] == 42
assert test_modlevel.answer == 17
class TestFromClass:
def test_module(self):
assert modlevel[0] == 42
assert not hasattr(test_modlevel, 'answer')
""")
rep = sorter.getreport("test_modlevel")
assert rep.passed
rep = sorter.getreport("test_module")
assert rep.passed
def test_class_setup(testdir):
sorter = testdir.inline_runsource("""
class TestSimpleClassSetup:
clslevel = []
def setup_class(cls):
cls.clslevel.append(23)
def teardown_class(cls):
cls.clslevel.pop()
def test_classlevel(self):
assert self.clslevel[0] == 23
class TestInheritedClassSetupStillWorks(TestSimpleClassSetup):
def test_classlevel_anothertime(self):
assert self.clslevel == [23]
def test_cleanup():
assert not TestSimpleClassSetup.clslevel
assert not TestInheritedClassSetupStillWorks.clslevel
""")
sorter.assertoutcome(passed=1+2+1)
def test_method_setup(testdir):
sorter = testdir.inline_runsource("""
class TestSetupMethod:
def setup_method(self, meth):
self.methsetup = meth
def teardown_method(self, meth):
del self.methsetup
def test_some(self):
assert self.methsetup == self.test_some
def test_other(self):
assert self.methsetup == self.test_other
""")
sorter.assertoutcome(passed=2)
def test_method_generator_setup(testdir):
sorter = testdir.inline_runsource("""
class TestSetupTeardownOnInstance:
def setup_class(cls):
cls.classsetup = True
def setup_method(self, method):
self.methsetup = method
def test_generate(self):
assert self.classsetup
assert self.methsetup == self.test_generate
yield self.generated, 5
yield self.generated, 2
def generated(self, value):
assert self.classsetup
assert self.methsetup == self.test_generate
assert value == 5
""")
sorter.assertoutcome(passed=1, failed=1)
def test_func_generator_setup(testdir):
sorter = testdir.inline_runsource("""
import sys
def setup_module(mod):
print "setup_module"
mod.x = []
def setup_function(fun):
print "setup_function"
x.append(1)
def teardown_function(fun):
print "teardown_function"
x.pop()
def test_one():
assert x == [1]
def check():
print "check"
print >>sys.stderr, "e"
assert x == [1]
yield check
assert x == [1]
""")
rep = sorter.getreport("test_one")
assert rep.passed
def test_method_setup_uses_fresh_instances(testdir):
sorter = testdir.inline_runsource("""
class TestSelfState1:
def __init__(self):
self.hello = 42
def test_hello(self):
self.world = 23
def test_afterhello(self):
assert not hasattr(self, 'world')
assert self.hello == 42
class TestSelfState2:
def test_hello(self):
self.world = 10
def test_world(self):
assert not hasattr(self, 'world')
""")
sorter.assertoutcome(passed=4, failed=0)
from py.__.test.config import SetupState
class TestSetupState:
def test_setupitem_works(self, testdir):
item = testdir.getitem("""
def setup_module(mod):
pass
def test_func():
pass
""")
evrec = testdir.geteventrecorder(item.config)
setup = SetupState()
res = setup.setupitem(item)
assert res
def test_setupitem_fails(self, testdir):
item = testdir.getitem("""
def setup_module(mod):
print "world"
raise ValueError(42)
def test_func():
pass
""")
evrec = testdir.geteventrecorder(item.config)
setup = SetupState()
res = setup.setupitem(item)
assert not res
rep = evrec.popevent("itemsetupreport").rep
assert rep.failed
assert not rep.skipped
assert rep.excrepr
assert "42" in str(rep.excrepr)
assert rep.outerr[0].find("world") != -1
def test_teardownitem_fails(self, testdir):
item = testdir.getitem("""
def test_func():
pass
def teardown_function(func):
print "13"
raise ValueError(25)
""")
evrec = testdir.geteventrecorder(item.config)
setup = SetupState()
res = setup.setupitem(item)
assert res
setup.teardownitem(item)
rep = evrec.popevent("itemsetupreport").rep
assert rep.item == item
assert rep.failed
assert not rep.passed
assert "13" in rep.outerr[0]
assert "25" in str(rep.excrepr)
def test_setupitem_skips(self, testdir):
item = testdir.getitem("""
import py
def setup_module(mod):
py.test.skip("17")
def test_func():
pass
""")
evrec = testdir.geteventrecorder(item.config)
setup = SetupState()
setup.setupitem(item)
rep = evrec.popevent("itemsetupreport").rep
assert not rep.failed
assert rep.skipped
assert rep.excrepr
assert "17" in str(rep.excrepr)