... не зная, является ли «макет» правильным словом.Могу ли я «Mock» время в PHPUnit?
В любом случае у меня есть унаследованная база кода, которую я пытаюсь написать для некоторых тестов, основанных на времени. Попытка не быть слишком неопределенный, код связан с просмотром истории предмета и определением, установлен ли этот элемент на основе порогового значения времени.
В какой-то момент мне также нужно проверить добавление чего-то в эту историю и проверку того, что порог теперь изменен (и, очевидно, исправлен).
Проблема, с которой я сталкиваюсь, заключается в том, что часть кода, который я тестирую, использует вызовы времени(), и поэтому мне очень трудно точно узнать, какое время должно быть на пороге, на основе факт, что я не совсем уверен, когда будет вызвана функция time().
Итак, мой вопрос в основном таков: есть ли способ для меня «переопределить» вызов time() или каким-то образом «измотать» время, чтобы мои тесты работали в «известное время»?
Или мне просто нужно признать тот факт, что мне нужно что-то сделать в коде, который я тестирую, чтобы каким-то образом позволить мне заставить его использовать определенное время, если это необходимо?
В любом случае, существуют ли какие-либо «распространенные практики» для разработки чувствительных к времени функциональных возможностей, дружественных к тестам?
Редактировать: Часть моей проблемы также заключается в том, что время, которое произошло в истории, влияет на порог. Вот пример моей проблемы ...
Представьте, что у вас есть банан, и вы пытаетесь разобраться, когда его нужно съесть. Предположим, что он истечет в течение 3 дней, если только он не был распылен каким-либо химическим веществом, и в этом случае мы добавляем 4 дня до истечения срока годности, с момента нанесения спрея. Затем мы можем добавить еще 3 месяца, заморозив его, но если он был заморожен, у нас есть только один день, чтобы использовать его после его оттаивания.
Все эти правила продиктованы историческими таймингами. Я согласен с тем, что я мог бы использовать предложение Доминика по тестированию в течение нескольких секунд, но что из моих исторических данных? Должен ли я просто «создавать» это на лету?
Как вы можете или не можете быть в состоянии сказать, что я все еще пытаюсь получить повесить все это понятия «тестирования»;)
Мне очень нравится эта идея Фабиан. Дополнительным преимуществом является то, что он заставляет моих соработников обновляться до 5.3;) – Narcissus
Это очень * полезно, спасибо за то, что поделились этой техникой с нами, Фабиан - высоко ценим! – MicE
гений произведение здесь. Пространства имен для функций делают полезным заменить встроенные функции для тестирования. – mauris