我也可能误解了一些东西,但你可以简单地在你的代码中触发事件,使用相同的参数,如 z3c.form (类似于@keul 的评论)?
在 Plone 4.3.x 中进行简短搜索后,我在以下位置找到了这个z3c.form.form
:
def applyChanges(self, data):
content = self.getContent()
changes = applyChanges(self, content, data)
# ``changes`` is a dictionary; if empty, there were no changes
if changes:
# Construct change-descriptions for the object-modified event
descriptions = []
for interface, names in changes.items():
descriptions.append(
zope.lifecycleevent.Attributes(interface, *names))
# Send out a detailed object-modified event
zope.event.notify(
zope.lifecycleevent.ObjectModifiedEvent(content, *descriptions))
return changes
你需要两个测试用例,一个什么都不做,一个通过你的代码。
applyChanges
位于同一个模块 (z3c.form.form) 中,它遍历表单字段并计算包含所有更改的 dict。
你应该在那里设置一个断点来检查字典是如何构建的。
之后,您可以在测试用例中执行相同的操作。
这样您就可以编写可读的测试用例。
def test_do_something_in_event(self)
content = self.get_my_content()
descriptions = self.get_event_descriptions()
zope.event.notify(zope.lifecycleevent.ObjectModifiedEvent(content, *descriptions))
self.assertSomething(...)
恕我直言,嘲笑整个逻辑可能对未来来说是个坏主意,如果代码发生变化并且可能工作方式完全不同,那么您的测试仍然可以。