[Zope] FunctionalTestCase commits transactions

Peter Bengtsson peter at fry-it.com
Mon Nov 3 07:53:32 EST 2008

I'm trying to get zope.testbrowser to work in Zope 2.10. After a lot
of guesswork (easy_install zope.testbrowser broke my environment, Zope
2.11 isn't setting up session container, used various blogs tips to
get adapters right) I got it running and I can now do stuff like
browser.open(self.folder.myapp.absolute_url()) in python unit test.
However, I have a problem. The app uses ZSQL Methods and when the test
finishes the transaction is not rolled back and I'm not interested in
manually resetting the test database.
Is this so deliberately?
Do I really have to manually reset the database?

I noticed that FunctionTestCase
(lib/python/Testing/ZopeTestCase/ZopeTestCase.py:116) inherits from
functional.Functional which inherits from sandbox.SandBoxed which,
although I don't understand it, seems to do things differently to the
non-functional approach which inherits from base.TestCase.

Although I'm not using it, function.Functional adds the nifty function
publish() which I'm not using but it's not a transaction.commit() in
it. Why??
And what does that decorator actually do?


class Functional(sandbox.Sandboxed):
    __implements__ = (interfaces.IFunctional,)

    def publish(self, path, basic=None, env=None, extra=None,
                request_method='GET', stdin=None, handle_errors=True):
        '''Publishes the object at 'path' returning a response object.'''

        # Commit the sandbox for good measure

Peter Bengtsson,
work www.fry-it.com
home www.peterbe.com
hobby www.issuetrackerproduct.com

More information about the Zope mailing list