How to set up a resource shared by several unit tests?

依然范特西╮ 提交于 2019-12-12 08:30:02

问题


In Python, how can I have one setup (which may contain expensive function calls) for a whole set of unit tests?

Example:

import unittest

class Test1(unittest.TestCase):
    def setUp(self):
        print "expensive call"
    def test1(self):
        self.assertEqual(1, 1)
    def test2(self):
        self.assertEqual(1, 1)

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

Will run the expensive call twice:

$ python unittest.py
expensive call
.expensive call
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

How can I change it so the expensive call is made only once and its resources accessible to all tests?

UPDATE: I'm using Python 2.6.


回答1:


You can use setUpClass

import unittest

class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print 'setUpClass'
        cls.data = 123

    def test_one(self):
        print 'test_one'
        print self.data

    def test_two(self):
        print 'test_two'


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

See http://docs.python.org/library/unittest.html#unittest.TestCase.setUpClass

UPDATE:

For python 2.6, I suppose you could use class-level attributes:

class Test(unittest.TestCase):
     value = result_of_some_expensive_function()
     def test(self):
         print self.value

That function will run once when your test is defined.



来源:https://stackoverflow.com/questions/12202085/how-to-set-up-a-resource-shared-by-several-unit-tests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!