[unittest] Run setUp only once

Nikolaus Rath Nikolaus at rath.org
Tue Jul 29 19:26:09 CEST 2008

Jean-Paul Calderone <exarkun at divmod.com> writes:
> On Tue, 29 Jul 2008 16:35:55 +0200, Nikolaus Rath <nikolaus at rath.org> wrote:
>>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?



 »It is not worth an intelligent man's time to be in the majority.
  By definition, there are already enough people to do that.«
                                                         -J.H. Hardy

  PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6  02CF A9AD B7F8 AE4E 425C

More information about the Python-list mailing list