Python 测试多个子类的继承
Python Test inheritance with multiple subclasses
我想编写一个 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 ...
本例中,DetailedTestOne继承自TestBaseClass,DetailedTestOneA继承自DetailedTestOne。
使用上面的代码,我得到:
AttributeError: 'DetailedTestOne' object has no attribute 'var1'
对于 DetailedTestOne 和:
AttributeError: 'DetailedTestOneA' object has no attribute 'var1'
对于 DetailedTestOneA
当然,var1、var2、var3 可以是在 TestBaseClass 中第一个实例中声明的同一变量的一些成员。
关于如何实现这种行为有什么想法吗?
您需要在您的子类中调用超类实现,例如,从您的 DetailedTestOne.setUp
方法中执行 super(DetailedTestOne, self).setUp()
。
我想编写一个 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 ...
本例中,DetailedTestOne继承自TestBaseClass,DetailedTestOneA继承自DetailedTestOne。
使用上面的代码,我得到:
AttributeError: 'DetailedTestOne' object has no attribute 'var1'
对于 DetailedTestOne 和:
AttributeError: 'DetailedTestOneA' object has no attribute 'var1'
对于 DetailedTestOneA
当然,var1、var2、var3 可以是在 TestBaseClass 中第一个实例中声明的同一变量的一些成员。
关于如何实现这种行为有什么想法吗?
您需要在您的子类中调用超类实现,例如,从您的 DetailedTestOne.setUp
方法中执行 super(DetailedTestOne, self).setUp()
。