我有一个函数 removeElements() 需要在每个测试用例的拆解中调用。有什么方法可以在拆卸时自动调用此函数,而不是在每个测试用例中复制函数调用?
问问题
954 次
2 回答
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
于 2013-04-26T17:51:06.017 回答
1
Python unittest有一个可以使用的tearDown()方法:
import unittest
class ElementTestCase(unittest.TestCase):
def setUp(self):
addElements()
def tearDown(self):
removeElements()
#define test cases...
于 2013-04-25T22:32:05.493 回答