Я могу “Дразнить” время в PHPUnit?

... не знание, если 'насмешка' является правильным словом.

Так или иначе у меня есть наследованная кодовая база, что я пытаюсь записать, что некоторые тесты для этого основаны на времени. Пытаясь не быть слишком неопределенным, код связан с рассмотрением истории объекта и определения, если тот объект теперь основывал порог времени.

В какой-то момент я также должен протестировать добавление чего-то к той истории и проверив, что порог теперь изменяется (и, очевидно, корректный).

Проблема, которую я поражаю, состоит в том, что часть кода, который я тестирую, использует вызовы для времени () и таким образом, мне действительно трудно знать точно, каково пороговое время должно быть, на основе того, что я не совсем уверен точно, когда то время () функция будет названным.

Таким образом, мой вопрос - в основном это: есть ли некоторый способ для меня 'переопределить' время () вызов, или так или иначе 'насмешка' время, такое, что мои тесты работают в 'известное время'?

Или я должен просто принять то, что я оказываюсь перед необходимостью делать что-то в коде, который я тестирую, чтобы так или иначе позволить мне вынуждать это использовать определенное время в случае необходимости?

Так или иначе есть ли какие-либо 'общие методы' для разработки чувствительной ко времени функциональности, которая является дружественным тестом?

Править: Часть моей проблемы также является тем, что время, когда вещи произошли в истории, влияет на порог. Вот пример части моей проблемы...

Предположите, что у Вас есть банан, и Вы пытаетесь разработать, когда им нужно съесть. Скажем, то, что это истечет в течение 3 дней, если это не опрыскивалось небольшим количеством химиката, в этом случае мы добавляем 4 дня к истечению со времени, брызги были применены. Затем мы можем добавить еще 3 месяца к нему путем замораживания его, но если это было заморожено тогда, у нас только есть 1 день для использования его после того, как это тает.

Все эти правила диктуют исторические синхронизации. Я соглашаюсь, что мог использовать предложение Dominik тестирования в течение нескольких секунд, но что из моих исторических данных? Я должен просто 'создать' это на лету?

Как Вы можете или не можете быть в состоянии сказать, я все еще пытаюсь получить подвешивание всего этого понятия 'тестирования';)

69
задан Narcissus 3 March 2010 в 14:48
поделиться

2 ответа

Лично я продолжаю использовать time () в тестируемых функциях / методах. В вашем тестовом коде просто убедитесь, что вы не проверяете равенство с помощью time (), а просто проверяете разницу во времени менее 1 или 2 (в зависимости от того, сколько времени требуется для выполнения функции)

3
ответ дан 24 November 2019 в 13:54
поделиться

Простейшим решением было бы переопределить функцию PHP time () и заменить ее вашей собственной версией. Однако вы не можете легко заменить встроенные функции PHP ( см. Здесь ).

Если не считать этого, единственный способ - абстрагироваться от вызова time () некоторого собственного класса / функции, который вернет время, необходимое для тестирования.

В качестве альтернативы вы можете запустить тестовую систему (операционную систему) на виртуальной машине и изменить время всего виртуального компьютера.

1
ответ дан 24 November 2019 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: