[TIP] cleanUp for unittest

Scott David Daniels Scott.Daniels at Acm.Org
Sat Apr 4 09:23:56 PDT 2009


Kumar McMillan wrote:
> ... .The idea as I understand it is that you would build the list of clean
> up functions dynamically.  I could be wrong though as I don't use
> Trial much.
>
> E.G.
>
> def setUp(self):
>    self.db = ScratchDb()
>    self.db.setup()
>    self.cleanUp.append(lambda: self.db.teardown())
>
>    self.tmp = TempIO()
>    self.cleanUp.append(lambda: self.tmp.destroy())
>   
Here is where I have to rant slightly (although I agree with Kumar):
_never_ write "lambda: function()" -- that "complexification." 
Instead, write "function".  The idea of a function does not mean you
cannot use a method:  "obj.method" is a function which calls a method
on an object.  This is one of the great things about Python!
So, the above should be:
   def setUp(self):
        self.db = ScratchDb()
        self.db.setup()
        self.cleanUp.append(self.db.teardown)
        self.tmp = TempIO()
        self.cleanUp.append(self.tmp.destroy)
For those who are worried about "How do I throw in a few args?":
    import functools as ft
    ...
         self.cleanUp.append(ft.partial(function, arg0, arg1))
    ...
> I am a big +1 on this feature.
>   
Having implemented this too many times already in tests, I am tempted
to be +2, but I will bow to community pressure and only vote +1.

--Scott David Daniels
Scott.Daniels at Acm.Org




More information about the testing-in-python mailing list