[TIP] cleanUp for unittest
Douglas Philips
dgou at mac.com
Sun Apr 5 18:02:47 PDT 2009
On or about 2009 Apr 4, at 12:23 PM, Scott David Daniels indited:
> 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.
Ugh, well, if I were going to do that kind of thing (and I admit that
I like the cleanup LIFO stack idea a lot), I would have some utility
helpers:
def setUp(self):
self.db = self.setupScratchDb()
self.tmp = self.setupTempIO()
# save the manual self.cleanUp.append() calls for those cases where
they really are one-offs.
I've also done things in other non-test code where the creating
function returns a tuple:
new_thing, clean_up_thunk =
make_some_thing_that_gc_cannot_fully_finalize(...)
Because, really, it is an encapsulation failure if the code asking for
a new "thing" has to know how to clean it up.
-Doug
More information about the testing-in-python
mailing list