我有一个函数removeElements(),需要在每个测试用例的拆解中调用它。有什么办法可以在拆卸时自动调用此函数,而不是在每个测试用例中复制函数调用吗?
答案 0 :(得分:2)
您似乎已经了解了testCase
方法,并且您已经知道如何继承实现,而您唯一缺少的是如何继承实现但仍允许自定义。
最简单的方法是创建一个实现tearDown
挂钩的中间类或mixin类。例如,让我们说你正在编写这样的测试用例:
class MyTestCase(unittest.TestCase):
def tearDown(self):
print('Tearing down {}'.format(self))
...但您希望他们都致电removeElements
。
定义此中间类:
class ElementRemovingTestCase(unittest.TestCase):
def tearDown(self):
self.removeElements()
现在用这种方式写你的案例:
class MyTestCase(ElementRemovingTestCase):
def tearDown(self):
super(MyTestCase, self).tearDown()
print('Tearing down {}'.format(self))
如果您不想在方法解析链中传递tearDown
,那么您可以在每个测试用例中保存一行代码,您只需定义一个新的挂钩协议:
class ElementRemovingTestCase(unittest.TestCase):
def tearDown(self):
self.removeElements()
self.additionalTearDown()
class MyTestCase(ElementRemovingTestCase):
def additionalTearDown(self):
print('Tearing down {}'.format(self))
在Python中任何其他常用的OO选项都可以在这里使用,无论你想要多么疯狂:
for name, case in inspect.getmembers(sys.modules[__name__],
lambda cls: issubclass(cls, unittest.TestCase)):
real_tearDown = case.tearDown
def tearDown(self):
self.removeElements()
real_tearDown(self)
case.tearDown = real_tearDown
答案 1 :(得分:1)
Python unittest有一个tearDown()方法可以使用:
import unittest
class ElementTestCase(unittest.TestCase):
def setUp(self):
addElements()
def tearDown(self):
removeElements()
#define test cases...