gpt4 book ai didi

php - Symfony 测试 - ClockMock/DateTime

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:37 24 4
gpt4 key购买 nike

我正在寻求有关为我们基于 JSON API 的应用程序创建复杂测试的帮助。

短问题场景:

  • 测试创建临时实体(用于比较)
  • EntityManagerMock 设置为等待 persist($temporaryEntity)
  • 使用一些参数测试调用真实方法
  • 方法创建实体并尝试保存在模拟 EM
  • 测试失败,因为时间改变了 1 秒

enter image description here

我们尝试使用 ClockMock 但它仅适用于被调用的类/命名空间。我们的方法在其他命名空间中,实体在接下来的某个时间创建。

我们正在寻找如何临时覆盖 PHP 平台 \DateTime 类的解决方案 - 或如何对项目中的所有 namespace /类使用 ClockMock 的技术(但仅用于测试)。我们尝试修改基于 Symfony 的 ClockMock - 但没有找到好的方法:-/。

有什么办法吗? (我不想使用像 get_declared_class() 这样的东西并调用它 clockMock::register - 因为它对于大约 15.000 次测试来说非常慢:-/。

谢谢大家!

最佳答案

ClockMock 不适用于 new\DateTime(),但仅适用于基于时间的 PHP 函数。

From the announcement of the features :

This means that you don't need to make a single change in your original code, except when using new DateTime(), which must be replaced by DateTime::createFromFormat('U', time()) to use the mocked time() function.

所以按照建议尝试:用带有时间函数的命名构造函数替换任何 DateTime 对象创建。

希望对你有帮助

关于php - Symfony 测试 - ClockMock/DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42587681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com