我对Python OO编程的经验不足以了解如何完成:如果我有几个类是unittest.TestCase
子类的子类。当后者调用这些方法时,超类的方法应如何引用子类的变量?让我试着用这个说明,可能是错误的例子:
import unittest
class TestSuper(unittest.TestCase):
def test_method(self):
# do something, e.g.
pass
class TestSub1(TestSuper):
def setUp(self):
self.some_parameter = 1
class TestSub2(TestSuper):
def setUp(self):
self.some_parameter = 2
if __name__ == '__main__':
unittest.main()
现在,当从子类调用TestSub1.parameter
时,我无法弄清楚如何正确引用TestSub2.parameter
或TestSuper.test_method
。
我受到https://stackoverflow.com/a/25695512/865169的启发,但在这里我尝试实现多个测试用例,它们的功能相同,但只是设置不同。我当然可以通过复制粘贴我的测试用例定义来实现所有这些,但我发现编码实践不好。
答案 0 :(得分:3)
只需使用self.some_parameter
; self
始终绑定到正确的实例。
但是,考虑到unittest.main()
将在所有三个测试用例(包括基类)上运行test_method
,因此您必须为{{1}提供默认值在基类上。
如果您不希望将some_parameter
视为测试用例,请不要继承TestSuper
。而是将其用作混合:
unittest.TestCase
现在import unittest
class TestMixin(object):
def test_method(self):
# do something, e.g.
pass
class TestSub1(unittest.TestCase, TestMixin):
def setUp(self):
self.some_parameter = 1
class TestSub2(unittest.TestCase, TestMixin):
def setUp(self):
self.some_parameter = 2
if __name__ == '__main__':
unittest.main()
只会找到两个测试用例(unittest.main()
和TestSub1
)并仅在这些情况下运行TestSub2
。