第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用連續(xù) () 進行測試時出現(xiàn)的問題

使用連續(xù) () 進行測試時出現(xiàn)的問題

PHP
FFIVE 2022-09-12 10:59:56
我有一個類 填充用戶支付統(tǒng)計服務 與方法:public function fillStatisticForAllTime(): void    {        $firstDate = \DateTime::createFromFormat('Y-m-d H:i:s', $this->userPaymentsRepository->getTheOldestDate());        $lastDate = (new \DateTime())->setTime(0, 0, 0);        while ($firstDate < $lastDate) {            $this->fillStatistic($firstDate);            $firstDate->add(new \DateInterval('P1D'));        }private function fillStatistic(\DateTime $day): void    {        $dateFrom = $day->setTime(0, 0, 0);        $dateTo = clone $day;        $dateTo->setTime(23, 59, 59);        $statisticAll = $this->userPaymentsRepository            ->getSummaryStatistic(['dateFrom' => $dateFrom, 'dateTo' => $dateTo, 'onlyPaid' => false]);        $this->userPaymentsStatisticRepository->insertDailyStatistic($statisticAll, $day, false);        $statisticOnlyPaid = $this->userPaymentsRepository            ->getSummaryStatistic(['dateFrom' => $dateFrom, 'dateTo' => $dateTo, 'onlyPaid' => true]);        $this->userPaymentsStatisticRepository->insertDailyStatistic($statisticOnlyPaid, $day, true);    }}我試著寫測試:public function testFillStatisticForAllTime(): void{    $dateFromFirst = (new \DateTime())->sub(new \DateInterval('P2D'))->setTime(0, 0, 0);    $dateToFirst = (new \DateTime())->sub(new \DateInterval('P2D'))->setTime(23, 59, 59);    $dateFromSecond = (new \DateTime())->sub(new \DateInterval('P1D'))->setTime(0, 0, 0);    $dateToSecond = (new \DateTime())->sub(new \DateInterval('P1D'))->setTime(23, 59, 59);    $statistic = ['addPeopleFromPlugin' => 10];    $statisticOnlyPaid = ['addPeopleFromPlugin' => 7];    $this->userPaymentsRepositoryMock->expects($this->once())        ->method('getTheOldestDate')        ->willReturn($dateFromFirst->format('Y-m-d H:i:s'));
查看完整描述

1 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

這里的主要問題是你的變量是可變對象(通過引用傳遞)

此外,在測試后會檢查模擬斷言,并且某些變量已更改。

修復:在使用任何日期之前克隆它(“分離”與原始變量)。

public function fillStatisticForAllTime(): void

{

    $firstDate = \DateTime::createFromFormat('Y-m-d H:i:s', $this->userPaymentsRepository->getTheOldestDate());

    $lastDate  = (new \DateTime())->setTime(0, 0, 0);

    while ($firstDate < $lastDate) {

        $this->fillStatistic(clone $firstDate); // <--------------- clone date

        $firstDate->add(new \DateInterval('P1D'));

    }

}



private function fillStatistic(\DateTime $day): void

{

    $dateFrom = clone $day; // <----------------------------------- clone date

    $dateFrom->setTime(0, 0, 0);

    $dateTo = clone $day;

    $dateTo->setTime(23, 59, 59);


    $statisticAll = $this->userPaymentsRepository

        ->getSummaryStatistic(['dateFrom' => $dateFrom, 'dateTo' => $dateTo, 'onlyPaid' => false]);

    $this->userPaymentsStatisticRepository->insertDailyStatistic($statisticAll, $day, false);


    $statisticOnlyPaid = $this->userPaymentsRepository

        ->getSummaryStatistic(['dateFrom' => $dateFrom, 'dateTo' => $dateTo, 'onlyPaid' => true]);

    $this->userPaymentsStatisticRepository->insertDailyStatistic($statisticOnlyPaid, $day, true);

}

順便說一句,你的第二種方法之所以有效,是因為你創(chuàng)建了一個新對象(從原始變量“detact”)


為了避免將來出現(xiàn)類似的錯誤,您可能需要使用不可變的日期對象。


查看完整回答
反對 回復 2022-09-12
  • 1 回答
  • 0 關注
  • 129 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號