我有一个类似这样的函数:
public function getSomeInfo($id){
$date_start=new DateTime();
$day_of_week=$date_start->format("N");
$date_start=$date_start->sub(new DateInterval("P".$day_of_week."D"));
$date_end=new $date_start;
$date_end=$date_end->add(new DateInterval("P5D"));
$date_start=$date_start->format("Y-m-d");
$date_end=$date_end->format("Y-m-d");
$sql="SELECT * FROM `table`
WHERE `table`.`id`=$id
AND `session`.`date`>'$date_start'
AND `session`.`date`<='$date_end'";
$this->db->query($sql);
}
它返回本周的数据集,基本上是从表中选择日期介于上周一和本周日之间的记录。
我希望能够对此进行单元测试,但我不知道如何在它启动 DateTime 构造函数时执行此操作。这将是当前一周,但实际上出于测试目的,我只希望测试数据集中有一周的数据,所以我真的希望测试 DateTime 每次都是相同的日期。
基本上我如何每次都将 DateTime("now") 设置为相同的模拟日期。我正在使用 PHP、Codeigniter 和 PHPUnit/CIUnit(隐含在标签中)。
最佳答案
您可以改为将 $date_start
变量传递给函数,当您在测试中调用它时,每次都会相同,即
function testMymethod(){
$date_start = new DateTime('2011-01-01');
$class->getSomeInfo($id, $date_start);
//assertions
}
并且您的方法签名将更改为:
class myclass {
public function getSomeInfo($id, $date_start = new DateTime()){...}
}
关于php - 单元测试包含 DateTime ("now"的函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22024576/