如何设置多个单元测试共享的资源?

Fra*_*ank 9 python unit-testing python-2.6

在Python中,如何为一整套单元测试设置一个设置(可能包含昂贵的函数调用)?

例:

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()
Run Code Online (Sandbox Code Playgroud)

将运行两次昂贵的电话:

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

OK
Run Code Online (Sandbox Code Playgroud)

如何更改它,以便只进行一次昂贵的调用,并且所有测试都可以访问其资源?

更新:我使用的是Python 2.6.

Chr*_*isB 15

您可以使用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()
Run Code Online (Sandbox Code Playgroud)

请参阅http://docs.python.org/library/unittest.html#unittest.TestCase.setUpClass

更新:

对于python 2.6,我想你可以使用类级属性:

class Test(unittest.TestCase):
     value = result_of_some_expensive_function()
     def test(self):
         print self.value
Run Code Online (Sandbox Code Playgroud)

定义测试时,该函数将运行一次.