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

In Python, how can I install a single installation (which may contain expensive function calls) for the entire 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() 

Make an expensive call twice:

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

How can I change it, so an expensive call is made only once, and its resources are available for all tests?

UPDATE: I am using Python 2.6.

+7
source share
1 answer

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 

This function will run once when your test is determined.

+13
source

All Articles