【发布时间】:2017-03-03 20:14:58
【问题描述】:
我在为我们基于 JSON API 的应用程序创建复杂测试寻求帮助。
短问题场景:
- 测试创建临时实体(用于比较)
- EntityManagerMock 设置为等待 persist($temporaryEntity)
- 使用一些参数测试调用真实方法
- 方法创建实体并尝试保存在 mocked EM
- 测试失败,因为时间改变了 1 秒
我们尝试使用 ClockMock,但它仅适用于被调用/用于命名空间的类。我们的方法在其他命名空间中,实体在接下来的某个地方创建。
我们正在寻找解决方案如何临时覆盖 PHP 平台 \DateTime 类 - 或技术如何将 ClockMock 用于项目中的所有命名空间/类(但仅用于测试)。我们尝试修改基于 Symfony 的 ClockMock - 但没有找到好方法:-/。
有什么办法吗? (我不想使用 get_declared_class() 之类的东西并用它调用 clockMock::register - 因为它对于大约 15.000 次测试来说非常慢:-/。
谢谢大家!
【问题讨论】:
-
"我们正在寻找如何临时覆盖 PHP 平台 \DateTime 类的解决方案。"我不是在追随你为什么需要或想要这样做。模拟它对单元测试有何帮助?
-
你能展示一下代码的相关部分吗?
-
很抱歉,我必须将代码粘贴到 bin:pastebin.com/ZhBMrq4P - 它已简化但主要问题存在。问题是对持久调用的期望-因为“新日期时间”有时会产生更长的时间(当测试在第二个运行时)。将所有类都注册到 ClockMock 是一种解决方案——但对于完整的项目来说,时间非常昂贵。
标签: php unit-testing symfony mocking phpunit