Python(unittest)超类方法应如何在其调用子类中引用变量?

时间:2016-01-22 10:02:10

标签: python unit-testing

我对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.parameterTestSuper.test_method

我受到https://stackoverflow.com/a/25695512/865169的启发,但在这里我尝试实现多个测试用例,它们的功能相同,但只是设置不同。我当然可以通过复制粘贴我的测试用例定义来实现所有这些,但我发现编码实践不好。

1 个答案:

答案 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