[unittest] Run setUp only once
Jean-Paul Calderone
exarkun at divmod.com
Tue Jul 29 13:32:34 EDT 2008
On Tue, 29 Jul 2008 19:26:09 +0200, Nikolaus Rath <nikolaus at rath.org> wrote:
>Jean-Paul Calderone <exarkun at divmod.com> writes:
>> On Tue, 29 Jul 2008 16:35:55 +0200, Nikolaus Rath <nikolaus at rath.org> wrote:
>>>Hello,
>>>
>>>I have a number of conceptually separate tests that nevertheless need
>>>a common, complicated and expensive setup.
>>>
>>>Unfortunately, unittest runs the setUp method once for each defined
>>>test, even if they're part of the same class as in
>>>
>>>class TwoTests(unittest.TestCase):
>>> def setUp(self):
>>> # do something very time consuming
>>>
>>> def testOneThing(self):
>>>
>>>
>>> def testADifferentThing(self):
>>>
>>>
>>>which would call setUp twice.
>>>
>>>
>>>Is there any way to avoid this, without packing all the unrelated
>>>tests into one big function?
>>>
>>
>> class TwoTests(unittest.TestCase):
>> setUpResult = None
>>
>> def setUp(self):
>> if self.setUpResult is None:
>> self.setUpResult = computeIt()
>>
>> ...
>>
>> There are plenty of variations on this pattern.
>
>
>But at least this variation doesn't work, because unittest apparently
>also creates two separate TwoTests instances for the two tests. Isn't
>there some way to convince unittest to reuse the same instance instead
>of trying to solve the problem in the test code itself?
>
Eh sorry, you're right, the above is broken. `setUpResult` should be
a class attribute instead of an instance attribute.
Jean-Paul
More information about the Python-list
mailing list