当前位置: 首页 > 面试题库 >

我可以在PHPUnit中“模拟”时间吗?

陈龙野
2023-03-14
问题内容

…不知道’mock’是否正确。

无论如何,我有一个继承的代码库,我试图为此编写一些基于时间的测试。为了 不太 含糊,该代码与查看某项的历史并确定该项是否基于时间阈值有关。

在某些时候,我还需要测试向该历史记录中添加一些内容,并检查阈值现在是否已更改(并且显然正确)。

我遇到的问题是我正在测试的部分代码使用对time()的调用,因此基于我的事实,我发现很难确切知道阈值时间应该是多少。我不太确定何时会调用time()函数。

所以我的问题基本上是这样的:我是否可以通过某种方式“替代” time()调用,或者以某种方式“模拟”时间,从而使测试在“已知时间”内正常工作?

还是我只需要接受这样一个事实,即我将不得不在正在测试的代码中做某件事,以某种方式允许我在需要时强迫它使用特定的时间?

无论哪种方式,是否都存在开发对时间敏感的,易于测试的功能的“通用做法”?

编辑:我的问题也有一部分是事实,即历史发生的时间会影响阈值。这是我部分问题的一个例子…

想象一下,你有一根香蕉,当你需要把它吃掉的时候,你正在努力解决。假设它将在3天内失效,除非用某种化学药品喷洒了,在这种情况下,我们 从喷涂开始算起将
有效期增加了4天。然后,我们可以通过冻结将其再添加3个月,但是如果将其冻结,则融化后只有1天的时间可以使用它。

所有这些规则都是由历史时间决定的。我同意我可以在几秒钟内使用Dominik的测试建议,但是我的历史数据是什么?我是否应该即时“创建”它?

正如您可能无法知道的那样,我仍在尝试掌握所有这种“测试”概念;)


问题答案:

我最近想出了另一种解决方案,如果您使用的是PHP
5.3名称空间,那将是一个很好的解决方案。您可以在当前名称空间中实现一个新的time()函数,并创建一个共享资源,您可以在其中设置测试中的返回值。然后,任何对time()的不合格调用都将使用您的新函数。



 类似资料:
  • 问题内容: 我有一个关于使用PHPUnit模拟类中的私有方法的问题。让我举一个例子: 我该如何对私有方法的结果进行存根测试以测试公共函数的 更多代码 部分。 问题答案: 通常,您只是不直接测试或嘲笑私有和受保护的方法。 您要测试的是您的类的 公共 API。其他所有内容都是您的类的实现细节,并且如果更改它,则不应“破坏”您的测试。 当您发现“无法获得100%的代码覆盖率”时,这也对您有所帮助,因为您

  • Apple刚刚向公众宣布了新的NFC Core API。 这是他们说的。 核心NFC 借助 Core NFC 框架,您的应用现在可以支持标记写入,包括写入 NDEF 格式的标记。该框架还支持使用本机协议(如 ISO 7816、MIFARE、ISO 15693 和 FeliCa)读取和写入标签。有关详细信息,请参阅核心 NFC 框架文档。 https://developer.apple.com/io

  • 问题内容: 我的问题如标题中所述。我正在尝试做类似的事情: 我得到错误: 是否有其他方法可以在模板中进行模量计算? 问题答案: 添加具有所需逻辑的模板功能。例如: 游乐场的例子

  • 我在LabVIEW中有一个控制和仿真循环结构,它向Multisim模型发送输入并从Multisim模型接收输出。我想测量Multisim模型的两个布尔输出变为true时的仿真时间差。我可以添加一个Control&Simulation->Simulation->Utilities->Simulation Time小部件,并将其连接到前面板上的一个指示器上,并在运行它时看到仿真时间的进展,但我无法找到

  • mocked类定义如下: 在Kotlin/Groovy/Spock中有没有一种方法可以避免对这两种方法进行存根处理?我想出的最好办法是用另一个来存根,这很有效,但很不幸: