…不知道’mock’是否正确。
无论如何,我有一个继承的代码库,我试图为此编写一些基于时间的测试。为了 不太 含糊,该代码与查看某项的历史并确定该项是否基于时间阈值有关。
在某些时候,我还需要测试向该历史记录中添加一些内容,并检查阈值现在是否已更改(并且显然正确)。
我遇到的问题是我正在测试的部分代码使用对time()的调用,因此基于我的事实,我发现很难确切知道阈值时间应该是多少。我不太确定何时会调用time()函数。
所以我的问题基本上是这样的:我是否可以通过某种方式“替代” time()调用,或者以某种方式“模拟”时间,从而使测试在“已知时间”内正常工作?
还是我只需要接受这样一个事实,即我将不得不在正在测试的代码中做某件事,以某种方式允许我在需要时强迫它使用特定的时间?
无论哪种方式,是否都存在开发对时间敏感的,易于测试的功能的“通用做法”?
编辑:我的问题也有一部分是事实,即历史发生的时间会影响阈值。这是我部分问题的一个例子…
想象一下,你有一根香蕉,当你需要把它吃掉的时候,你正在努力解决。假设它将在3天内失效,除非用某种化学药品喷洒了,在这种情况下,我们 从喷涂开始算起将 有效期增加了4天。然后,我们可以通过冻结将其再添加3个月,但是如果将其冻结,则融化后只有1天的时间可以使用它。
所有这些规则都是由历史时间决定的。我同意我可以在几秒钟内使用Dominik的测试建议,但是我的历史数据是什么?我是否应该即时“创建”它?
正如您可能无法知道的那样,我仍在尝试掌握所有这种“测试”概念;)
我最近想出了另一种解决方案,如果您使用的是PHP 5.3名称空间,那将是一个很好的解决方案。您可以在当前名称空间中实现一个新的time()函数,并创建一个共享资源,您可以在其中设置测试中的返回值。然后,任何对time()的不合格调用都将使用您的新函数。