Thanks for the tips Chris and Dieter, I actually solved it in a very simple way: from OFS.Image import File from time import time class MockFile(File): """ This file works the same as a normal File expect that in manage_edit() the internal modification time is set immediately. Normally Zope objects get their internal modification set when the transaction manager commits. """ def manage_edit(self, title, content_type, precondition='', filedata=None, REQUEST=None): # here's the mock hack, we set the _p_mtime NOW instead of letting # the transaction manager do it at the end. self._p_mtime = time() return File.manage_edit(self, title, content_type, precondition=precondition, filedata=filedata, REQUEST=REQUEST) This worked beautifully in the integration test. I'm happy. On 10/04/2008, Chris Withers <chris@simplistix.co.uk> wrote:
Peter Bengtsson wrote:
How can I solve this? Make one big transaction two without having to use transaction.get().commit() which I don't think I can use in unit tests as per Dieter's advice.
I'd suggest monkeypatching bobobase_modification_time on the objects you're testing with. You're testing your cache code, not the implementation of those objects, so replacing them with (partially) dummy objects is great for avoiding this kind of problem and is a pattern I've used frequently...
cheers,
Chris
-- Simplistix - Content Management, Zope & Python Consulting - http://www.simplistix.co.uk
-- Peter Bengtsson, work www.fry-it.com home www.peterbe.com hobby www.issuetrackerproduct.com