Я также могу неправильно понять что-то, но вы можете просто запустить событие в своем коде с такими же параметрами, как z3c.form (похоже на комментарий от @keul)?
После короткого поиска в 4.3.x Plone, я нашел это в 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
Вам нужно два testcases, тот, который не делает ничего, и тот, который идет через ваш код.
applyChanges
находится в том же модуле (z3c.form.form), он итерации по полям формы и вычисляет dict со всеми изменениями.
Вы должны установить там точку перерыва, чтобы проверить, как строит 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(...)
ИМХО насмешливый всю логику прочь может быть плохой идеей для будущего, если изменения кода и, вероятно, работает совершенно иначе, ваш тест будет по-прежнему хорошо.
Вероятно, я не получаю то, что вам нужно, но если вы хотите * unit test * функцию, почему вы не можете просто называть ее параметром mock event? Объект, который предоставляет атрибут 'description'? –
@keul, это была идея, я хочу знать, как издеваться над описанием, исходящим из z3c.form – gforcada
К сожалению, я не получу большую картину. Кажется, что вы, вероятно, не выполняете единичный тест (но тест интеграции?), Если вам нужен реальный z3c.form. –