【问题标题】:How do I check that a particular lifecycle event method runs in a Doctrine event subscriber?如何检查特定生命周期事件方法是否在 Doctrine 事件订阅者中运行?
【发布时间】:2015-02-27 17:38:51
【问题描述】:

我在事件侦听器中有一个 preUpdate 事件挂钩,我想编写一个测试来验证它是否在特定文档更新时被执行。我能找到的关于测试任何与 Doctrine 相关的文档的唯一文档是关于测试查询构建器的。我是 Doctrine 的新手,这似乎是一件很简单的事情,但我真的想不通。

【问题讨论】:

  • 您可以做以下两件事之一(或两者都做):1. 对侦听器进行单元测试,模拟您需要传递给侦听器的对象,然后调用功能并确保实体更新。 2. 编写一个功能测试,该测试实际执行将触发侦听器的数据库操作,然后轮询数据库值以确保它已更改为您的预期。
  • 你有没有得到任何地方?你更喜欢功能测试还是单元测试?

标签: symfony doctrine-orm phpunit lifecycle doctrine-odm


【解决方案1】:

您可以使用partial mock。假设具有 preUpdate 钩子的类称为 Entity。

$mock = $this->getMockBuilder('Mock')->setMethods(array('preUpdate'))->getMock();

这会创建一个对象,其中只有 preUpdate 方法被存根,您可以将期望写入此方法:

$mock->expects($this->once())->method('preUpdate');
// some code that triggers the hook

该类的所有其他方法都将像在原始类中一样工作 - 它们不会被覆盖

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多