gpt4 book ai didi

php - 单元测试包含 DateTime ("now"的函数)

转载 作者:可可西里 更新时间:2023-11-01 00:02:37 24 4
gpt4 key购买 nike

我有一个类似这样的函数:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com