【发布时间】:2019-10-30 12:17:11
【问题描述】:
我想知道,当为具有多重继承的类运行 setUp()/tearDown() 方法时,unittest 做了什么特别的事情。
举个例子:
import unittest
class Foo:
def __init__(self, foo):
self._foo = foo
@property
def foo(self):
return self._foo
class TestsBase(unittest.TestCase):
def setUp(self):
super().setUp()
self.base_value = 1
class TestsMixin:
def setUp(self):
super().setUp()
self.expected_value = 1
class TestCase1(TestsMixin, TestsBase):
def test_base_value_is_equal_to_expected_value(self):
foo = Foo(self.base_value)
self.assertEqual(foo.foo, self.expected_value)
class TestCase2(TestsBase, TestsMixin):
def test_base_value_is_equal_to_expected_value(self):
foo = Foo(self.base_value)
self.assertEqual(foo.foo, self.expected_value)
if __name__ == '__main__':
unittest.main()
运行此代码时,TestCase1 类测试将成功,而 TestCase2 测试将失败,表明 AttributeError: 'TestCase2' object has no attribute 'expected_value'。
现在,我了解了 MRO 的工作原理,也了解了为什么会显示此错误,但让我感到困惑的是,为什么 TestCase1 没有同样的问题?毕竟,不会使用来自TestsMixin 的setUp() 方法并跳过来自TestsBase 的setUp() 吗?
我的结论是unittest 模块必须为此工作。有谁知道什么/如何?
提前致谢。
【问题讨论】:
标签: python unit-testing multiple-inheritance