Python-разработчики часто тестируют код с зависимостью от времени. Но обычный mock для дат — это намного сложнее, чем кажется.
Библиотека time-machine решает эту проблему: она позволяет буквально «перемещать время» внутри тестов.
Например:
import datetime as dt
import time_machine
@time_machine.travel("2030-01-01")
def test_future():
assert dt.date.today() == dt.date(2030, 1, 1)
В отличие от популярных подходов вроде freezegun, библиотека не ищет и не заменяет все импорты в проекте.
Она работает на уровне C API CPython, перехватывая функции даты и времени напрямую. Поэтому скорость не зависит от количества загруженных модулей. В бенчмарках time-machine оказался более чем в 100 раз быстрее freezegun на простых сценариях.
Полезно для тестирования:
• подписок и платежей
• истечения токенов
• календарных функций
• планировщиков задач
• логики с дедлайнами
Проект:
https://github.com/adamchainz/time-machine
https://adamj.eu/tech/2026/08/03/python-time-machine-o1-freezegun-on/