【问题标题】:How to inherit from multiple base test classes using pythons unittest?如何使用pythons unittest从多个基础测试类继承?
【发布时间】:2017-08-01 14:20:24
【问题描述】:

我正在编写一些测试,并希望在不同的 TestCase 类之间共享 setUp 和 tearDown 方法。为此,我认为您可以使用仅实现 setUp 和 tearDown 方法并从中继承的基本测试类。但是,我也有想使用来自多个 setUp 的变量的情况。这是一个例子:

class Base(unittest.TestCase):
    def setUp(self):
        self.shared = 'I am shared between everyone'

    def tearDown(self):
        del self.shared


class Base2(unittest.TestCase):
    def setUp(self):
        self.partial_shared = 'I am shared between only some tests'

    def tearDown(self):
        del self.partial_shared


class Test1(Base):

    def test(self):
        print self.shared
        test_var = 'I only need Base'
        print test_var



class Test2(Base2):

    def test(self):
        print self.partial_shared
        test_var = 'I only need Base2'


class Test3(Base, Base2):

    def test(self):
        test_var = 'I need both Base and Base2'
        print self.shared
        print self.partial_shared


if __name__=='__main__':
    unittest.main()

这是输出:

..EI am shared between everyone
I only need Base
I am shared between only some tests
I am shared between everyone

======================================================================
ERROR: test (__main__.Test3)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/b3053674/Documents/PyCoTools/PyCoTools/Tests/base_tests.py", line 134, in test
    print self.partial_shared
AttributeError: 'Test3' object has no attribute 'partial_shared'

----------------------------------------------------------------------
Ran 3 tests in 0.004s

FAILED (errors=1)

是否可以实现这样的类继承?

【问题讨论】:

    标签: python inheritance testing python-unittest


    【解决方案1】:

    Python 支持链式继承

    你可以让class Base2()继承自Base,然后添加你想要的东西。

    像这样:

    class Base2(Base):
        def setUp(self):
            super(Base2, self).setUp()
            self.partial_shared = 'I am shared between only some tests'
    

    然后从它继承:

    class Test3(Base2):
    
        def test(self):
            test_var = 'I need both Base and Base2'
            print self.shared
            print self.partial_shared
    

    【讨论】:

    • 嗨,伊戈尔,感谢您的回复。我尝试了您的建议并收到以下错误:TypeError: Error when calling the metaclass bases Cannot create a consistent method resolution order (MRO) for bases Base, Base2
    • 一秒钟。我需要检查一下。
    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2021-12-15
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多