【发布时间】:2017-06-26 06:10:22
【问题描述】:
我有什么:
我有一个监听 Symfony 中 PreRemove 实体事件的 EventListener。
services:
my_bundle.entity_listener.my_listener:
class: 'MyCompany\MyBundle\MyListener'
public: false
tags:
- { name: doctrine.orm.entity_listener, entity: 'MyCompany\MyBundle\Entity\MyEntity', event: preRemove }
我想要什么:
我想要一个测试(功能/集成/单元或任何其他真正的)以某种方式检查 MyEntity 被删除时是否正在调用特定的 EventListener。
更新
我不想在单元测试中这样做,需要实际检查事件调度程序是否真的会调用该特定事件侦听器来处理该特定事件。
更新 2
我认为这很明显,但似乎不是 - 解决方案不应修改 EventListener 或 Event。
更新 3
我指定我不在乎测试的名称是什么:功能、单元或任何其他。
更新 4
解决方案必须保证测试将在任何环境的上下文中通过。因此,如果有人扩展了我的包并弄乱了我的定义,我仍然应该能够验证 EventHandling 是否真的有效。
此外,检查处理结果不是一种选择,因为:
EventListener 绝对可以做任何事情 - 在某些情况下,我可能无法简单地检查结果并确定 EventListener 是否有效。
有人可能以几乎完全相同的方式处理一个事件,因此“结果”是相同的,但“方式”是错误的。
【问题讨论】:
-
你不信任什么? Symfony Event Dispatcher 是否经过适当测试?还是您的应用程序配置正确?
-
可能是第二个。但是,教义在事件监听方面存在许多陷阱和问题。稍后,我想通过测试插入聚合(例如)调用所需的偶数侦听器来强化我的测试条件。