在unittest的测试之间持久变量变化?

发布于 2021-01-29 17:48:19

如何保持TestCase在unitttest中继承的同一对象内所做的更改?

from unittest import TestCase, main as unittest_main


class TestSimpleFoo(TestCase):
    foo = 'bar'

    def setUp(self):
        pass

    def test_a(self):
        self.assertEqual(self.foo, 'bar')
        self.foo = 'can'

    def test_f(self):
        self.assertEqual(self.foo, 'can')


if __name__ == '__main__':
    unittest_main()

即:我希望以上两项测试通过

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    正如一些评论所回响的那样,以这种方式构造测试可能是测试本身的设计缺陷,您应该考虑对其进行重组。但是,如果您要执行此操作,并且依赖于所使用的测试运行程序以字母(看似)顺序执行它们的事实,那么我建议以下内容。

    类似于@Matthias所说的,但是对于以后您可能决定从该类继承的情况,我会做不同的事情。

    from unittest import TestCase, main as unittest_main
    
    
    class TestSimpleFoo(TestCase):
        foo = 'bar'
    
        def setUp(self):
            pass
    
        def test_a(self):
            self.assertEqual(self.__class__.foo, 'bar')
            self.__class__.foo = 'can'
    
        def test_f(self):
            self.assertEqual(self.__class__.foo, 'can')
    
    
    if __name__ == '__main__':
        unittest_main()
    

    此答案与您接受的@Matthias答案之间的区别是类的显式声明与查找该类引用的区别。

    TestSimpleFoo vs self.__class__
    

    我更喜欢动态性,这样我以后就可以继承测试,并背对背运行两个测试类,并且两者之间没有任何交叉。因为如果您选择从此类继承,则显式命名类引用将导致两个测试类都针对该引用运行,而不是针对各自的类运行。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看