Python-разработчики часто тестируют код с зависимостью от времени. Но обычный mock для дат — это намного сложнее, чем кажется.

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/

3