CloudCastle Clock

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

MockClock — horloge simulée avec sommeil virtuel

Objectif

Comme FrozenClock, mais implémente en plus SleepableClockInterface : sleep() avance instantanément le temps virtuel sans bloquer le processus.

Utilité et mode d’emploi

Tester les mécanismes de retry/backoff, le polling et les délais d’attente en quelques millisecondes : le code « dort », l’horloge avance, le test n’attend jamais.

Exemple

$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-modèles

Ne mélangez pas avec de vrais délais (usleep) dans un même scénario — les chronologies divergeraient.

Cycle de vie

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

Comparaison des fonctionnalités avec les concurrents

Aspect🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
sleep() virtuel sans blocage✅✅❌❌❌❌
sleepUntil() jusqu’à un instant✅❌❌❌❌❌
Décalages en arrière (rewind)✅❌❌❌❌❌
Isolation sans état global✅✅❌✅✅✅
Total🏆 420111

← Retour à la liste des fonctionnalités


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