ss Я пишу unittest, используя KernelTestCase Symfony и должен проверить функциональность, которая происходит только в определенный день (очень рано или слишком поздно).
Поэтому, когда я позволю своему тесту выполнитьполдень, конечно, ничего не происходит.Как я могу подделать системное время, притворяясь, что у него другое время, и мой тестовый пример запущен.
Я пробовал использовать класс ClockMock от Symfony, но он не работает.https://symfony.com/doc/current/components/phpunit_bridge.html#clock-mocking
Это мой тестовый код:
use Symfony\Bridge\PhpUnit\ClockMock;
use \DateTime;
/**
* testUserAchievedEarlyBirdTrophy
* @group time-sensitive
*/
public function testUserAchievedEarlyBirdTrophy()
{
ClockMock::withClockMock(strtotime('2018-11-05 01:00:00'));
echo (new DateTime())->format('Y-m-d H:m:s');
$user8Id = $this->user8->getId();
$progressSaveRequest = new ProgressSaveRequest($user8Id, $this->content_1_1->getId());
$this->progressService->saveProgress($progressSaveRequest);
$this->assertTrue($this->loggerCreator->hasDebugThatContains(
'Early Bird'
));
}
эхо дает мне сегодняшнюю дату: 2019-02-01 16: 02: 06
У меня тоже былощущение, что ClockMock скорее используется для пропуска времени, например, для тестирования кэширования вместо sleep ().
Что я делаю не так?
В моем phpunit.xml есть вызов конфигурацииbin / simple-phpunit вызывает много случаев установки.
Разве я не могу использовать обычный phpunit?
Есть ли другие варианты подделки времени дня?