Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个子类的Python测试继承_Python_Unit Testing_Inheritance_Subclass_Python Unittest - Fatal编程技术网

具有多个子类的Python测试继承

具有多个子类的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

我想以这样一种方式编写Python测试套件:允许我从单个TestBaseClass继承并多次对其子类化,每次都更改其成员变量中的一些小细节

比如:

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
,那么您必须以我在这里展示的相同方式显式调用它。