Python(unittest)超类方法应该如何引用其调用子类中的变量?
我在Python OO编程方面经验不足,不知道如何做到这一点:如果我有几个类是Python(unittest)超类方法应该如何引用其调用子类中的变量?,python,unit-testing,Python,Unit Testing,我在Python OO编程方面经验不足,不知道如何做到这一点:如果我有几个类是unittest.TestCase子类的子类。当子类调用这些方法时,超类的方法应该如何引用子类的变量?让我试着用这个可能是错误的例子来说明: import unittest class TestSuper(unittest.TestCase): def test_method(self): # do something, e.g. pass class TestSub1(T
unittest.TestCase
子类的子类。当子类调用这些方法时,超类的方法应该如何引用子类的变量?让我试着用这个可能是错误的例子来说明:
import unittest
class TestSuper(unittest.TestCase):
def test_method(self):
# do something, e.g.
pass
class TestSub1(TestSuper):
def setUp(self):
self.some_parameter = 1
class TestSub2(TestSuper):
def setUp(self):
self.some_parameter = 2
if __name__ == '__main__':
unittest.main()
现在,当从子类中调用TestSuper.test\u方法时,我不知道如何分别更正引用TestSub1.parameter
或TestSub2.parameter
我的灵感来自于,但在这里我试图实现多个测试用例,它们做的相同,但只是在设置上有所不同。当然,我可以通过复制粘贴我的测试用例定义来实现这一切,但我发现这是一种糟糕的编码实践。只需使用self。一些参数
self
始终绑定到此处的正确实例
但是,考虑到unittest.main()
将在*所有三个测试用例(包括基类)上运行test\u方法,因此必须为基类上的some\u参数提供默认值
如果您不想将TestSuper
视为测试用例,请不要从unittest.TestCase
继承。将其用作混合:
import unittest
class TestMixin(object):
def test_method(self):
# do something, e.g.
pass
class TestSub1(unittest.TestCase, TestMixin):
def setUp(self):
self.some_parameter = 1
class TestSub2(unittest.TestCase, TestMixin):
def setUp(self):
self.some_parameter = 2
if __name__ == '__main__':
unittest.main()
现在unittest.main()
将只找到两个测试用例(TestSub1
和TestSub2
),并仅在这些用例上运行test\u方法。只需使用self.some\u参数即可self
始终绑定到此处的正确实例
但是,考虑到unittest.main()
将在*所有三个测试用例(包括基类)上运行test\u方法,因此必须为基类上的some\u参数提供默认值
如果您不想将TestSuper
视为测试用例,请不要从unittest.TestCase
继承。将其用作混合:
import unittest
class TestMixin(object):
def test_method(self):
# do something, e.g.
pass
class TestSub1(unittest.TestCase, TestMixin):
def setUp(self):
self.some_parameter = 1
class TestSub2(unittest.TestCase, TestMixin):
def setUp(self):
self.some_parameter = 2
if __name__ == '__main__':
unittest.main()
现在unittest.main()
将只找到两个测试用例(TestSub1
和TestSub2
),并仅在这些用例上运行test\u方法。,我有点害怕mixin方法,因为@vadim-p建议将基类隐藏在非TestCase类中,以便跳过基类中的测试:@ThomasArildsen:在基类和mixin中没有提供相同的方法。不过,正确地使用混合器并不难。另请参阅,以获得有关多重继承的详细解释。@ThomasArildsen:隐藏的“hack”是一个hack,不需要。它会造成混乱,降低可读性。嗯,我不明白这一点。在我稍微复杂一些的真实测试中,隐藏hack可以工作,但是mixin不能。在后一种情况下,错误消息似乎表明Python希望self引用TestMixin,因此它无法找到TestSub1中的参数,例如,我有点害怕mixin方法,因为@vadim-p建议将基类隐藏在非TestCase类中,以便跳过基类中的测试:@ThomasArildsen:在基类和mixin中没有提供相同的方法。不过,正确地使用混合器并不难。另请参阅,以获得有关多重继承的详细解释。@ThomasArildsen:隐藏的“hack”是一个hack,不需要。它会造成混乱,降低可读性。嗯,我不明白这一点。在我稍微复杂一些的真实测试中,隐藏hack可以工作,但是mixin不能。在后一种情况下,错误消息似乎表明Python希望self引用TestMixin,因此它找不到TestSub1中的参数。