在python unittest中双重继承TestCase类时如何避免属性错误?

2024-06-24 12:15:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下构造,其中我从unittest.TestCase派生一个类,在这个构造中,调用了在实际测试类MyTests中定义的方法。在

import unittest

class TestCase1(unittest.TestCase):

    @classmethod
    def setUpClass(cls):  
        print cls.extra()

class TestCase2(TestCase1):

    @classmethod
    def setUpClass(cls):
        TestCase1.setUpClass()

class MyTests(TestCase1):

    @classmethod
    def extra(cls):
        return 42

    def test1(self):
        pass

if __name__ == '__main__':
    unittest.main()

上面的代码,就目前的情况来看,是按预期工作的。当我执行测试时,运行TestCase1setUpClass,它执行MyTests中定义的extra()。在

当我想使用TestCase2而不是TestCase1时,即当我将以下行中的“1”更改为“2”时,问题就出现了:

^{pr2}$

其思想是调用TestCase2setUpClass,它本身从基类调用{},即TestCase1,它执行方法extra。但是,我得到一个属性错误:

AttributeError: type object 'TestCase1' has no attribute 'extra'

我好像误解了一些概念。我希望我的代码在这两种情况下都能正常工作(可能有一些错误),或者在两种情况下都失败。如果您有任何想法,这里可能有什么问题,或者我如何解决问题,我们将不胜感激。在


Tags: 方法定义maindef情况unittestextratestcase
2条回答

原因是当它从TestCase2继承时,cls被调用时传递给的cls是{}类型,它没有extra()方法。从MyTests调用时,clsMyTests的一个实例,它有一个额外的方法。在

supercls参数从MyTests.setUpClass(cls)传递给TestCase1.setUpClass(cls)。所以当它到达TestCase1cls有一个extra()方法。在

我强烈建议使用super而不是TestCase1.setUpClass()。在

相关问题 更多 >