如何在php中测试调度程序

前端之家收集整理的这篇文章主要介绍了如何在php中测试调度程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个codeigniter应用程序,它在 mysql数据库中安排特定日期和时间的事件,有时提前几周,另一部分将发送电子邮件提醒并在这些日期发生时执行其他操作.如何进行基于时间的测试?有没有我可以使用或阅读的测试套件?
这是我思索了很长一段时间的事情 – 然后我意识到了我的问题!我专注于时间,好像这是我无法控制和测量的东西.时间就像我们的应用程序中发生的任何其他计算一样.因此,基于时间的测试很容易 – 我们只需要改变我们对它的思考方式 – 以及我们如何构建我们的应用程序.

首先,要做的第一件事是将当前时间生成序列分离为方法.这样,我们可以稍后嘲笑它(也就是说,生成我们自己的方法,总是返回预定的’时间’进行测试).这可以像…那样简单

protected function _getCurrentTime()
{
     return time();
}

有什么好处:在我们的代码中,我们将调用它来获取当前时间进行计算.但是,在测试中,我们总能生成完全相同的时间.

这很重要 – 我们每次都可以始终生成完全相同的时间.

现在,我不完全确定如何在您的特定应用程序中将其付诸实践,但让我解释一个“假的”应用程序 – 看看您是否可以根据您的规范进行调整.

好的,首先,我们有这样的方法,在我们的数据库中放入一个条目,从现在开始为期3周的“提醒”.

这是旧代码

public function addReminderToDB()
{
    $this->_executesql('insert into mytable values (1,2,date_add(now(),interval 3 week))');
}

那么,我们如何测试呢?这显然每次都会有所不同?

好吧,让我们分手吧.这是我们的新代码……

代码

public function addReminderToDB()
{
    $currentDate = date('m-d-Y h:i:s',$this->_getCurrentTime());
    $sql = "insert into mytable values (1,date_add('{$currentDate}',interval 3 week))";
    $this->_executesql($sql);
 }

现在,在测试时……您可以设置测试数据库.接下来,模拟方法_getCurrentTime()以始终返回您知道的整数.然后,运行addReminderToDB()(它将使用您知道的那个整数).最后,查询数据源以验证插入的行是否具有您期望的正确值.

我知道这并不是你要问的问题,但问题也很模糊: – /祝你好运!

原文链接:https://www.f2er.com/php/136262.html

猜你在找的PHP相关文章