Controlled
provide.testkit.time.controlled
¶
Controlled time utilities for testing.
Injectable time sources and sleep functions that don't rely on global mocking.
Functions¶
advance_time
¶
Advance a mocked time by specified seconds.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mock_time
|
Mock
|
The mock time object |
required |
seconds
|
float
|
Number of seconds to advance |
required |
Example
from unittest.mock import Mock, patch with patch("time.time") as mock_time: ... mock_time.return_value = 100.0 ... advance_time(mock_time, 50.0) ... assert mock_time.return_value == 150.0
Source code in provide/testkit/time/controlled.py
make_controlled_time
¶
make_controlled_time() -> tuple[
Callable[[], float],
Callable[[float], None],
Callable[[float], None],
Callable[[float], Awaitable[None]],
]
Create controlled time source and sleep functions for testing.
This provides injectable time/sleep functions that don't rely on global mocking, making tests faster and more reliable. Use these instead of time_machine.freeze() for retry/circuit breaker tests.
Returns:
| Type | Description |
|---|---|
tuple[Callable[[], float], Callable[[float], None], Callable[[float], None], Callable[[float], Awaitable[None]]]
|
Tuple of (get_time, advance_time, fake_sleep, fake_async_sleep) |
Example
get_time, advance_time, fake_sleep, fake_async_sleep = make_controlled_time() executor = RetryExecutor( ... policy, ... time_source=get_time, ... sleep_func=fake_sleep, ... async_sleep_func=fake_async_sleep, ... )
In tests:¶
advance_time(5.0) # Simulate 5 seconds passing assert get_time() == 5.0