CloudCastle Clock

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

MockClock — reloj simulado con sueño virtual

Propósito

Como FrozenClock, pero además implementa SleepableClockInterface: sleep() desplaza instantáneamente el tiempo virtual sin bloquear el proceso.

Para qué y cómo utilizarlo

Pruebas de retry/backoff, sondeo (polling) y tiempos de espera en milisegundos: el código «duerme», el reloj se desplaza, la prueba no espera.

Ejemplo

$clock = MockClock::from('2026-01-01 00:00:00', 'UTC');
$retry = new RetryPolicy($clock);  // the code under test calls sleep()
$retry->run();                      // instant: the sleep is virtual
$clock->sleepUntil(new DateTimeImmutable('2026-01-01 00:05:00'));

Antipatrones

No mezcle con retardos reales (usleep) en un mismo escenario — el tiempo se desdobla.

Ciclo de vida

sequenceDiagram
    participant T as Test
    participant C as MockClock
    participant S as Service
    T->>C: from('2026-01-01')
    T->>S: run()
    S->>C: sleep(30)
    C-->>S: instantly (+30s virtual)
    S->>C: now()
    C-->>S: 00:00:30

Comparación de la característica con análogos

Aspecto🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
sleep() virtual sin bloqueo✅✅❌❌❌❌
sleepUntil() hasta un momento✅❌❌❌❌❌
Desplazamientos hacia atrás (rewind)✅❌❌❌❌❌
Aislamiento sin estado global✅✅❌✅✅✅
Total🏆 420111

← A la lista de características


🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano