作者:BeBe-DANIC_796 | 来源:互联网 | 2023-02-10 08:50
我在为基于JSON API的应用程序创建复杂测试时寻求帮助。
简短的问题场景:
测试创建临时实体(供比较)
EntityManagerMock设置为等待persist($ temporaryEntity)
使用某些参数测试调用真实方法
方法创建实体并尝试保存在模拟的EM
测试失败,因为时间更改了1秒
我们尝试使用ClockMock,但它仅适用于名为/用于命名空间的类。我们的方法在其他名称空间,实体在下一个创建。
我们正在寻找一种解决方案,该方法如何临时重写PHP平台\ DateTime类-或一种技术,如何对项目中的所有名称空间/类使用ClockMock(但仅用于测试)。我们试图修改基于Symfony的ClockMock-但找不到好方法:-/。
有什么办法吗?(我不想使用类似get_declared_class()之类的东西,并用它调用clockMock :: register-因为它对于大约15.000个测试:-/非常缓慢。
谢谢大家!
1> Matteo..:
ClockMock不适用于new \DateTime()
仅基于时间的PHP函数。
从功能的公告:
这意味着您无需对原始代码进行任何更改,除非使用时,否则new DateTime()
必须将其替换DateTime::createFromFormat('U', time())
以使用模拟time()
功能。
因此,请按照建议的方法尝试:用time函数将所有DateTime对象创建替换为named-constructor。
希望有帮助