背景:
我们有一个处理体育赛事的网络应用程序,现在我们希望在我们的开发环境中运行它,使网站认为它是2009年秋季而不是2010年夏季.那是因为我们拥有去年的优秀数据秋季和今年的季节尚未开始,因此使用大量实际数据测试新功能将更容易,而不是编制2010年的新测试数据.
我们不想实际更改服务器的日期和时间.当前最佳选项似乎是将代码中的所有date()调用更改为my_date(),然后让my_date()将偏移量添加到实际系统日期.
看起来这个功能在其他人的类似情况下会很有用,所以我很好奇是否有一种更简单的方法可以通过一些配置参数全局完成,而无需修改代码.我做了RTM.
if(APP_ENV === 'testing') {
include 'datetime-monkeypatches.PHP';
}
其中datetime-monkeypatches.PHP将包含所需功能的补丁.这样您就不必更改实际代码.这就像在原始函数中使用适配器一样,只要将它们保存在单独的文件中,它就可以保持可维护状态.
另一种选择是使用http://antecedent.github.io/patchwork
Patchwork is a PHP library that makes it possible to redefine user-defined functions and methods at runtime,loosely replicating the functionality
runkit_function_redefinein pure PHP 5.3 code,which,among other things,enables you to replace static and private methods with test doubles.