<p>我也可能误解了一些东西,但是您可以在代码中简单地触发事件,使用与z3c.form相同的参数(类似于@keul的注释)?你知道吗</p>
<p>在Plone 4.3.x中进行了一个简短的搜索之后,我在<code>z3c.form.form</code>中找到了这个:</p>
<pre><code>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
</code></pre>
<p>您需要两个测试用例,一个什么都不做,另一个遍历您的代码。你知道吗</p>
<p><code>applyChanges</code>在同一个模块中(z3c。窗体。窗体)它遍历表单字段并计算包含所有更改的dict。你知道吗</p>
<p>您应该在那里设置一个断点来检查dict是如何构建的。你知道吗</p>
<p>之后,您可以在测试用例中执行相同的操作。你知道吗</p>
<p>这样您就可以编写可读的测试用例。你知道吗</p>
<pre><code>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(...)
</code></pre>
<p>对于未来来说,模仿整个逻辑可能是个坏主意,如果代码发生了变化,并且可能工作方式完全不同,那么您的测试仍然可以。你知道吗</p>