9

Python では、単体テストのセット全体に対して 1 つのセットアップ (高価な関数呼び出しが含まれている可能性があります) をどのように行うことができますか?

例:

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

高価な呼び出しを 2 回実行します。

$ 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

この関数は、テストが定義されたときに 1 回実行されます。

于 2012-08-30T17:23:25.553 に答える