测试设计:如何模拟测试未来事件的检测和响应的时间流逝?

时间:2013-07-23 09:01:56

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

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

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

似乎最简单的方法是定义每天早上通过一组cron作业执行的脚本集合。每个脚本都会检查从系统触发特定响应所需的条件。例如,我可能有一组脚本,如SendInvoiceDueIn15DaysEmail.php,Sen​​dInvoicePastDue30DaysEmail.php等。

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

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

值得一提的是应用程序的核心是使用Laravel 4,但我认为这不是严格意义上的PHP问题。

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

1 个答案:

答案 0 :(得分:2)

我认为这里的答案与您想要测试的其他内容相同 - 一个时钟模拟。摘要你检查现在是什么时候的方式。然后你可以创建一个模拟时钟实现,它可以在测试期间更快地工作(或报告你想要的任何东西),另一个实现只会返回生产中的真实时间。

通过这种方式,您还可以测试其他方案,例如服务器上的时间更改或夏令时。