在我的项目中,我有一个TestCase的子类(称之为BaseTest),它做了一些准备然后重置测试环境的东西,以及大量的实际测试用例子类(大约80个),每个子类都有自己独特的setUp方法
我希望每个单独的测试用例子类在其setUp方法的末尾调用特定的钩子。我想这样做而不改变这些方法中的每一种。
基本上,情况看起来大概就像这个示例文件:
import unittest
class BaseTest(unittest.TestCase):
def setUp(self):
super().setUp()
print('prepping env')
def tearDown(self):
super().tearDown()
print('resetting env')
def post_setup_hook(self):
print('in post_setup_hook')
class TestFeatureA(BaseTest):
def setUp(self):
super().setUp()
print('prepping a')
def tearDown(self):
super().tearDown()
def test_0(self):
print('testing a0')
def test_1(self):
print('testing a1')
class TestFeatureB(BaseTest):
def setUp(self):
super().setUp()
print('prepping b')
def tearDown(self):
super().tearDown()
def test_0(self):
print('testing b0')
def test_1(self):
print('testing b1')
if __name__ == '__main__':
unittest.main()
我希望在每次打印'prepping a'或'prepping b'之后运行python -m unittest example
在post setup hook'中打印'的结果,但不修改TestFeatureA或TestFeatureB。可以这样做吗?
请注意,我正在使用python 3.6。我认为这不会在python 2.x中运行。
答案 0 :(得分:1)
您可以覆盖BaseTest(TestCase)
post_setup_hook
方法,以致电run
run
。
只需将BaseTest
方法复制粘贴到post_setup_hook
,然后在setUp
运行后添加withUnsafeBufferPointer
来电。
答案 1 :(得分:0)
在这里使用装饰器怎么样?
def post_setup(f):
def wrapper(*args):
print('in post_setup_hook')
f(*args) # execute BaseTest setUp
print(args[0].FOO) # Access BasteTest class attribute
print(args[0].foo) # Access BasteTest object foo attribute
print('out post_setup_hook')
return wrapper
class BaseTest(unittest.TestCase):
FOO = 'BAR'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.foo = 'bar'
@post_setup
def setUp(self):
super().setUp()
print('BaseTest - prepping env')
def tearDown(self):
super().tearDown()
print('BaseTest - resetting env')
class TestFeatureA(BaseTest):
def test_0(self):
print('TestFeatureA - testing a0')
if __name__ == '__main__':
unittest.main()
输出:
in post_setup_hook BaseTest - prepping env BAR bar out post_setup_hook TestFeatureA - testing a0 BaseTest - resetting env