我有一个类 填充用户支付统计服务 与方法:
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'));
RISEBY