[Zope-CMF] Mixing ZopeTestCase.Sandboxed and CMFTestCase?

Paul Winkler pw_lists at slinkp.com
Wed Oct 5 16:40:40 EDT 2005


Related to the thread about how best to set up CMFTestCase...
I'm just wondering if I'm doing anything non-kosher by deriving
from both CMFTestCase and ZopeTestCase.Sandboxed, which
theoretically should prevent any ZODB-pollution as long as I don't
do the global CMF site setup.

It mostly seems to work, but as far as I can tell, you *must*
inherit in exactly that order, i.e.

class MyTest(ZopeTestCase.Sandboxed, CMFTestCase.CMFTestCase):

    def getPortal(self):
        CMFTestCase.setupCMFSite()
        return getattr(self.app, CMFTestCase.portal_name)

    ...

The inheritance order should probably be documented somewhere.
If I switch the order, I get lots of barfing on getPortal() calls,
the getattr() fails.
.... Ahhh, I see; setupCMFSite() does its own call to
ZopeTestCase.app().  Hmm, could it take an optional app
argument? That would allow it to be used like so:

    def getPortal(self):
        CMFTestCase.setupCMFSite(app=self.app)
        return getattr(self.app, CMFTestCase.portal_name)

The modified setup function could be like so:

def setupCMFSite(id=portal_name, quiet=0, app=None):
    '''Creates a CMF site.'''
    if app is None:
        app = ZopeTestCase.app()
        close = ZopeTestCase.close
    else:
        # Don't clase the app if it already existed.
        def close(the_app):
            pass
    _setupCMFSite(app, id, quiet)
    close(app)

That seems to pass all tests with CMFTestCase,
and hey presto, my own product's tests work with it too and now the
inheritance order no longer seems to matter.

Thoughts? Stefan?


-- 
Paul Winkler
http://www.slinkp.com





More information about the Zope-CMF mailing list