Message 85443 - Python tracker (original) (raw)

On Sat, 2009-04-04 at 22:09 +0000, Antoine Pitrou wrote:

Antoine Pitrou <pitrou@free.fr> added the comment:

teardown

Why should they? It's only an implementation choice, and not a wise one I would say (precisely because people are used to the fact that the standard tearDown() method does nothing, and doesn't need to be called).

I explained my proposal in terms of actual use cases, but I don't see any actual use case of addCleanup() in your argument.

I was arguing by analogy: if we were to implement addCleanup as something called at the end of the base class tearDown, then it would clearly support LIFO tearing down of anything people have done [except that we can't rely on them having called the base tearDown]. The next best thing then is to call it from run() after calling tearDown.

If you want a worked example:

class TestSample(TestCase):

def setUp(self):
    dirname = mkdtemp()
    self.addCleanup(shutils.rmtree, dirname, ignore_errors=True)
    db = make_db(dirname)
    self.addCleanup(db.tearDown)

....

This depends on db being torn down before the rmtree, or else the db teardown will blow up (and it must be torn down to release locks correctly on windows).

-Rob