Chrono Mock
LinguaItaliano

Fai correre più veloce l'orologio di un'app

Una prova di 30 giorni impiega 30 giorni a scadere, a meno che tu non possa spostare il tempo. Il consiglio abituale è portare avanti l'orologio di sistema, il che richiede i diritti di amministratore e si trascina dietro ogni altro programma della macchina. Questo sposta un solo processo.

Quanto veloce

Scegli un moltiplicatore intero. L'orologio dell'applicazione avanza quel numero di volte più veloce di quello reale, a partire dal momento in cui la sessione inizia.

MoltiplicatoreUn minuto reale diventaUtile per
x60un'orajob orari, timeout di sessione, durata dei token
x1440un giornopassaggi giornalieri, una prova di 30 giorni in mezz'ora
x43200una prova di 30 giornivedere finire l'intera prova mentre leggi questo
x525600un annorinnovi annuali, scadenza dei certificati
x1000000circa 1,9 anniil tetto
# Partire dall'ora reale di adesso e correre di un giorno al minuto
chrono run "C:\apps\test.exe" --mode x1440

# Partire da una data scelta e accelerare da lì
chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440

# Tenere invece l'orologio completamente fermo
chrono run "C:\apps\test.exe" --mode frozen
Una registrazione di una sessione che pilota un'altra applicazione Windows. La finestra a sinistra è Chrono Mock, con l'orologio dell'applicazione al 2038-01-19 che sale a sessanta volte la velocità reale mentre l'orologio reale accanto avanza di pochi secondi. La finestra a destra è l'applicazione testata, il cui registro di sessione mostra che è partita il 2038-01-19 e gira da minuti contro appena mezzo minuto nella stanza.
Una sessione vera, che pilota un'applicazione vera. Guarda la finestra a destra: il programma testato ha registrato il proprio avvio al 19 gennaio 2038, e la sua sessione è durata minuti mentre l'orologio nella stanza avanzava di secondi. La velocità viene cambiata mentre gira, senza riavviare nulla.

La parte che coglie di sorpresa: ci sono due orologi

Accelerare l'orologio a muro - ciò che restituiscono DateTime.Now e i suoi equivalenti - non accelera di per sé un conto alla rovescia. Sono due domande diverse che un'applicazione può porre al sistema operativo, e molto software misura «trenta giorni» con la seconda invece che con la prima.

Quindi l'asse delle durate - conteggi di tick, sleep, attese e timer - è un interruttore a parte:

  • --scale-duration porta sull'orologio della sessione anche i contatori di tick, le pause e i timer, mentre le attese su oggetti vengono contate e mantengono la durata reale. Senza, x1440 fa correre il calendario mentre un timer di cinque secondi dura ancora cinque secondi reali - solo un timer impostato su una data e un'ora segue l'orologio della sessione in ogni sessione.
  • --scale-qpc scala in aggiunta il contatore ad alta risoluzione. È da lì che Python 3.13+ monotonic, .NET Stopwatch e Java nanoTime leggono il tempo trascorso, ed è disattivato per impostazione predefinita perché scalarlo ha destabilizzato il rendering nei test.

Se il moltiplicatore sembra non fare nulla a un conto alla rovescia, quasi sempre è per questo.

# Un'app timer: accelerare il calendario E i conti alla rovescia
chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration

# Un'app Python o .NET che misura il tempo trascorso sul contatore ad alta risoluzione
chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc

Cambiare velocità senza riavviare

Il moltiplicatore può cambiare a sessione in corso, e l'orologio viene riancorato invece che fatto saltare, quindi non va mai all'indietro quando la velocità scende. Puoi anche far saltare l'orologio di colpo - in avanti, o all'indietro come fa un portatile dopo essersi risincronizzato con un server orario, che è il caso che rompe tutto ciò che misura il tempo trascorso senza una protezione.

# Correre a x60, poi passare a x1440 dopo due secondi
chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440

# Correre, poi far saltare l'orologio a un momento scelto dopo cinque secondi
chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00

Che cosa non fa

  • Non tocca l'orologio di sistema. È il punto, non un limite - ma significa che tutto ciò che legge l'ora da un server, da un database o da un'altra macchina non ne è influenzato, e l'audit ti dice quando succede.
  • Un salto cambia ciò che l'applicazione vede, non quando si risveglia. Pause e timer già consegnati al kernel mantengono la durata ricevuta quando sono stati impostati. La maggior parte delle applicazioni interroga l'orologio, quindi in pratica i salti funzionano - ma non per tutte.
  • Non rallenta il tempo. I moltiplicatori sono numeri interi da uno in su, più un orologio congelato a zero.

Se qualcosa di tutto questo sia arrivato alla tua applicazione non è da dare per scontato. Lo dice la sessione →

Provalo