我想在
PHPUnit或Behat测试期间为DateTime实例化的每个实例设置时间.
我正在测试与时间有关的业务逻辑.例如,类中的方法只返回过去或将来的事件.
事情我不想做,如果可能的话:
1)在DateTime周围编写一个包装器,在代码中使用这个代替DateTime.这将涉及到我现在的代码库的重写.
2)每次运行测试/套件时动态生成数据集.
所以问题是:是否可以覆盖DateTimes行为总是提供特定的时间请求?
您应该在测试中存储所需的DateTime方法以返回预期值.
$stub = $this->getMock('DateTime'); $stub->expects($this->any()) ->method('theMethodYouNeedToReturnACertainValue') ->will($this->returnValue('your certain value'));
见http://www.phpunit.de/manual/3.6/en/test-doubles.html
> http://sebastian-bergmann.de/archives/885-Stubbing-Hard-Coded-Dependencies.html
这解释了如何在调用新的时候调用回调.然后,您可以使用具有固定时间的自定义DateTime类替换DateTime类.另一个选择是使用http://antecedent.github.io/patchwork