CloudCastle Clock

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

MockClock — Mock-Uhr mit virtuellem Schlaf

Zweck

Wie FrozenClock, implementiert aber zusätzlich SleepableClockInterface: sleep() verschiebt die virtuelle Zeit sofort, ohne den Prozess zu blockieren.

Wofür und wie einzusetzen

Testen von Retry/Backoff, Polling und Timeouts in Millisekunden: Der Code „schläft", die Uhr rückt vor, der Test wartet nie.

Beispiel

$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-Patterns

Mischen Sie sie nicht mit echten Verzögerungen (usleep) in einem Szenario — die Zeitachsen laufen auseinander.

Lebenszyklus

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

Funktionsvergleich mit Konkurrenten

Aspekt🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Virtuelles sleep() ohne Blockierung✅✅❌❌❌❌
sleepUntil() bis zu einem Zeitpunkt✅❌❌❌❌❌
Rückwärtsverschiebungen (rewind)✅❌❌❌❌❌
Isolation ohne globalen Zustand✅✅❌✅✅✅
Gesamt🏆 420111

← Zurück zur Funktionsliste


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