9

在 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()

将运行两次昂贵的调用:

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

OK

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

更新:我正在使用 Python 2.6。

4

1 回答 1

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()

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

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

于 2012-08-30T17:23:25.553 回答