【问题标题】:Test Design: How do I simulate the passage of time to test the detection of and response to events scheduled in the future?测试设计:我如何模拟时间的流逝来测试对未来计划事件的检测和响应?
【发布时间】:2013-07-22 06:17:20
【问题描述】:

我正在开发一个基于 Web 的租赁管理应用程序,该应用程序需要能够每天根据数据库中的信息在任何给定时间生成各种报告、提醒和警报。报告、提醒和警报类型的一些示例包括:

  • 发送一封交易电子邮件,让一组用户知道他们的下一张发票将在 15 天内到期。
  • 发送一封交易电子邮件,让一组用户知道他们有一张或多张逾期发票
  • 提醒物业经理某物业已逾期 X 天,并提议打印一套驱逐文件

似乎最简单的方法是定义一组脚本,这些脚本每天早上通过一组 cron 作业执行。每个脚本都会检查触发系统特定响应所需的标准。例如,我可能有一组脚本,例如 SendInvoiceDueIn15DaysEmail.php、SendInvoicePastDue30DaysEmail.php 等。

我的主要问题是,给定一个充满测试数据的数据库,模拟时间流逝的最佳方法是什么,比如 90 天,以确保数据每天触发正确的响应集?我的一些日常任务需要与第三方 API 进行交互,例如 Mandrill、Mail Chimp、一些行业特定的会计软件包等。

我的第二个问题是,如果有人有开发以未来发生的定期重复事件为中心的应用程序的经验,那么我是否走在正确的轨道上?我已经构建了大部分核心系统(用户管理、物业管理、租赁管理),现在是时候测试事物的自动化方面了。

应用程序的核心是使用 Laravel 4,但我不认为这是一个严格的 PHP 问题。

TL;DR 如何模拟时间的流逝,以检查系统在 90 天内是否正确检测到一组事件并触发成功完成的适当响应?

【问题讨论】:

    标签: php unit-testing testing scheduled-tasks laravel-4


    【解决方案1】:

    我认为这里的答案与您希望测试的其他所有内容相同 - 时钟模拟。抽象您检查现在时间的方式。然后,您可以创建一个在测试期间工作得更快(或报告您想要的任何内容)的模拟时钟实现,以及另一个在生产中简单地返回真实时间的实现。

    这样您还可以测试其他场景,例如服务器上的时间更改或夏令时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-13
      • 2023-03-19
      • 2021-01-24
      • 2011-12-18
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多