我有一个codeigniter应用程序,它在
mysql数据库中安排特定日期和时间的事件,有时提前几周,另一部分将发送电子邮件提醒并在这些日期发生时执行其他操作.如何进行基于时间的测试?有没有我可以使用或阅读的测试套件?
这是我思索了很长一段时间的事情 – 然后我意识到了我的问题!我专注于时间,好像这是我无法控制和测量的东西.时间就像我们的应用程序中发生的任何其他计算一样.因此,基于时间的测试很容易 – 我们只需要改变我们对它的思考方式 – 以及我们如何构建我们的应用程序.
原文链接:https://www.f2er.com/php/136262.html首先,要做的第一件事是将当前时间生成序列分离为方法.这样,我们可以稍后嘲笑它(也就是说,生成我们自己的方法,总是返回预定的’时间’进行测试).这可以像…那样简单
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()(它将使用您知道的那个整数).最后,查询数据源以验证插入的行是否具有您期望的正确值.
我知道这并不是你要问的问题,但问题也很模糊: – /祝你好运!