Domanda

Stiamo lavorando con grandi quantità di dati, tutti taggati in UTC (in Java). Tra la lettura di questi dati, l'archiviazione in un database e il rilascio di nuovo, è accaduto che alcuni dati fossero spenti un'ora durante l'ora legale. Poiché UTC non ha alcun concetto di ora legale, questo era chiaramente un bug all'interno del software. Una volta noto, è facile da risolvere.

Tuttavia, sarebbe bello avere alcuni test di unità / integrazione che funzionano indipendentemente dall'attuale differenza di tempo, ad es. Vorrei cambiare il fuso orario locale ed eseguire ripetutamente alcuni metodi all'interno di questi diversi fusi orari per assicurarsi che UTC sia gestito correttamente.

Poiché i test dovrebbero essere eseguiti automaticamente e - preferibilmente - all'interno di una Testsuite, mi chiedo come testare meglio il comportamento corretto. Sarebbe facile cambiare le impostazioni locali come il fuso orario al riavvio di JVM, ma eseguirlo all'interno di una suite di test non è così facile.

Qualcuno conosce un ambiente di test, una libreria o un modello che supporta questo scenario? Lavoriamo di solito con JUnit, ma siamo aperti all'aggiunta di un altro ambiente / tecnica se aiuta a sbarazzarsi di problemi come questo. Suppongo che sia piuttosto un test di integrazione piuttosto che unitario.

Modifica : ci sono già due risposte molto utili, ma immagino che ci siano più tecniche là fuori. Qualcuno ha informazioni autorevoli su quando / con quale frequenza verrà chiamato TimeZone.getDefault (vedere i commenti per le risposte di Jon Skeets)?

Nota : anche se questa domanda ha una risposta accettata, non ero del tutto sicuro di quale risposta accettare. Anche con questa accettazione mi piacerebbe vedere più idee e tecniche.

Grazie per il tuo contributo!

È stato utile?

Soluzione

Ti consiglio di dare un'occhiata a JodaTime che fornisce dello zucchero per aiutare a gestire la data / I problemi di tipo Time / TimeZone sono più leggibili nel codice.

Li usiamo durante i test e la produzione poiché il modo in cui aumenta l'API Java nativa per problemi di data / ora non ha eguali. L'uso di questi nei test funziona perfettamente con JUnit

Altri suggerimenti

Java consente di impostare il fuso orario predefinito (java.util.TimeZone.setDefault). Ho già scritto dei test per impostare il fuso orario su una varietà di opzioni diverse e verificare che tutto funzioni ancora. Attenzione però: se stai parallelizzando la maggior parte dei test unitari, dovrai renderli sequenziali.

Ti suggerisco di eseguire il test in alcuni fusi orari con l'ora legale e alcuni senza. Anche l'uso di un fuso orario australiano è buono, poiché l'ora legale si applica nel periodo opposto dell'anno all'emisfero settentrionale.

Qual è l'opinione sulla connessione ai time server e sull'ottenimento degli aggiornamenti?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top