我有以下构造,其中我从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()
上面的代码,就目前的情况来看,是按预期工作的。当我执行测试时,运行TestCase1
的setUpClass
,它执行MyTests
中定义的extra()
。在
当我想使用TestCase2
而不是TestCase1
时,即当我将以下行中的“1”更改为“2”时,问题就出现了:
其思想是调用TestCase2
的setUpClass
,它本身从基类调用{TestCase1
,它执行方法extra
。但是,我得到一个属性错误:
AttributeError: type object 'TestCase1' has no attribute 'extra'
我好像误解了一些概念。我希望我的代码在这两种情况下都能正常工作(可能有一些错误),或者在两种情况下都失败。如果您有任何想法,这里可能有什么问题,或者我如何解决问题,我们将不胜感激。在
原因是当它从}类型,它没有
TestCase2
继承时,cls
被调用时传递给的cls
是{extra()
方法。从MyTests调用时,cls
是MyTests
的一个实例,它有一个额外的方法。在super
将cls
参数从MyTests.setUpClass(cls)
传递给TestCase1.setUpClass(cls)
。所以当它到达TestCase1
,cls
有一个extra()
方法。在我强烈建议使用super而不是
TestCase1.setUpClass()
。在相关问题 更多 >
编程相关推荐