对于应用程序的测试套件,我需要强制一个日期。这些测试需要在特定时期(2012 年 1 月 1 日至 2012 年 12 月 31 日之间的日期)运行。在不修改代码稳定性的情况下,我无法修改数千个应用程序文件,我需要一种在引导程序中指定它的方法或类似替换服务器返回的日期的方法。可能吗?如果是,如何?
编辑:附评论:如何重载日期、日期时间等?
我认为你最好的选择是首先将 time() 和 date() 的所有使用重构为 gettime() 和 getdate() 之类的东西,然后在测试套件中覆盖这些函数。这就是可测试代码的结构(或者更好的是,将时间传递给所有需要它的函数)。
或者,您可以在可以安全设置系统时间的环境中运行测试。
最后,如果启用 runkit.internal_override ,您可以使用http://php.net/manual/en/function.runkit-function-redefine.php覆盖该函数