具有多个子类的Python测试继承
我想以这样一种方式编写Python测试套件:允许我从单个TestBaseClass继承并多次对其子类化,每次都更改其成员变量中的一些小细节 比如:具有多个子类的Python测试继承,python,unit-testing,inheritance,subclass,python-unittest,Python,Unit Testing,Inheritance,Subclass,Python Unittest,我想以这样一种方式编写Python测试套件:允许我从单个TestBaseClass继承并多次对其子类化,每次都更改其成员变量中的一些小细节 比如: import unittest class TestBaseClass(unittest.TestCase): def setUp(self): self.var1 = "exampleone" class DetailedTestOne(TestBaseClass): def setUp(self): self.var
import unittest
class TestBaseClass(unittest.TestCase):
def setUp(self):
self.var1 = "exampleone"
class DetailedTestOne(TestBaseClass):
def setUp(self):
self.var2 = "exampletwo"
def runTest(self):
self.assertEqual(self.var1, "exampleone")
self.assertEqual(self.var2, "exampletwo")
class DetailedTestOneA(DetailedTestOne):
def setUp(self):
self.var3 = "examplethree"
def runTest(self):
self.assertEqual(self.var1, "exampleone")
self.assertEqual(self.var2, "exampletwo")
self.assertEqual(self.var3, "examplethree")
... continue to subclass at wish ...
在本例中,DetailedStone继承自TestBaseClass,DetailedStonea继承自DetailedStone
通过上面的代码,我得到:
AttributeError: 'DetailedTestOne' object has no attribute 'var1'
有关详细的钻石和:
AttributeError: 'DetailedTestOneA' object has no attribute 'var1'
详情请参阅
当然,var1、var2、var3可以是TestBaseClass中第一个实例中声明的同一变量的一些成员
关于如何实现这种行为有什么想法吗?您需要在子类中调用超类实现,例如,
super(DetailedTestOne,self).setUp()
从DetailedTestOne.setUp
方法内部调用。完美!我原以为测试框架会嵌套安装调用,让我将其视为\uuuuu init\uuuu
,但我错了。@FrancisStraccia:\uuuu init\uuu
在这方面没有什么特别之处。如果您的子类重写了\uuuuu init\uuuu
,并且您希望调用超类\uuuuuu init\uuuu
,那么您必须以我在这里展示的相同方式显式调用它。