如何测试Symfony中的事件是否已调用EventListener?

是)我有的:

我有一个EventListener,它监听Symfony中的PreRemove实体事件.

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.

UPDATE

我不想在单元测试中这样做,需要实际检查事件调度程序是否真的会调用该特定事件的特定事件监听器.

更新2

我认为这很明显,但似乎不是 – 解决方案不应该修改EventListener或Event.

更新3

我指定我不关心测试的名称是什么:功能,单位或任何其他.

更新4

解决方案必须保证测试将在任何环境的上下文中传递.所以,如果有人用我的定义扩展我的捆绑和混乱,我仍然应该能够验证EventHandling是否真的有效.

此外,检查处理结果不是一种选择,因为:

> EventListener可以做任何事情 – 可能有些情况下我不能简单地检查结果并确定EventListener可以正常工作.
>有人可能以几乎完全相同的方式处理事件,因此“结果”是相同的,但“方式”是错误的.

最佳答案 功能测试用于测试功能;它无意测试该功能的实现或该实现的配置.

像你提议的那样的测试将是脆弱的并且不是非常有用.

您可能想要的是测试事件侦听器实现的功能.

点赞