CloudCastle Clock

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

MockClock — orologio mock con sleep virtuale

Scopo

Come FrozenClock, ma implementa in più SleepableClockInterface: sleep() fa avanzare istantaneamente il tempo virtuale senza bloccare il processo.

A cosa serve e come usarlo

Test di retry/backoff, polling e timeout in millisecondi: il codice «dorme», l'orologio avanza, il test non attende.

Esempio

$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'));

Anti-pattern

Non mescolarlo con ritardi reali (usleep) nello stesso scenario — le linee temporali si sfasano.

Ciclo di vita

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

Confronto della funzionalità con gli analoghi

Aspetto🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
sleep() virtuale senza blocco✅✅❌❌❌❌
sleepUntil() fino a un momento✅❌❌❌❌❌
Spostamenti indietro (rewind)✅❌❌❌❌❌
Isolamento senza stato globale✅✅❌✅✅✅
Totale🏆 420111

← Torna all'elenco delle funzionalità


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