Pergunta

Estamos a trabalhar com grandes quantidades de dados, tudo marcado em UTC (em Java). Entre ler esses dados, armazenando-o em um banco de dados e coloca-lo para fora outra vez, isso aconteceu, que alguns dados foi desligado uma hora durante o horário de verão. Como UTC não tem noção de horário de verão este foi claramente um bug no software. Uma vez conhecida, é fácil de corrigir.

No entanto, seria bom ter alguns testes de unidade / integração que o trabalho, independentemente da diferença de tempo atual - por exemplo, Eu gostaria de alterar o fuso horário local e executar alguns métodos e outra vez dentro desses fusos horários diferentes para se certificar de UTC é tratado corretamente.

Como os testes devem ser executados automaticamente e - de preferência - dentro de um TestSuite, eu estou querendo saber como melhor teste para o comportamento correto. Seria fácil para alterar as configurações locais, como fuso horário ao reiniciar a JVM, mas executar esta dentro de um conjunto de testes não é assim tão fácil.

Alguém sabe de um ambiente de teste, biblioteca ou padrão apoiar este cenário? Estamos trabalhando normalmente com JUnit, mas estão abertos para adicionar outro ambiente / técnica se ele ajuda a se livrar de problemas como este. Suponho que é sim uma integração- de teste de unidade.

Editar : Há já dois muito útil respostas, mas eu acho que deve haver mais técnicas lá fora. Alguém tem informações fidedignas sobre quando / quantas vezes TimeZone.getDefault será chamado (ver os comentários para as respostas Jon Skeets)?

Nota : Mesmo que esta questão tem uma resposta aceito, eu não estava completamente certo, que resposta para aceitar. Mesmo com essa aceitação que eu gostaria de ver mais idéias e técnicas.

Obrigado pelo seu contributo!

Foi útil?

Solução

Eu recomendo que você confira JodaTime que fornece um pouco de açúcar para ajudar a gerenciar Data / Time / TimeZone questões tipo de forma mais legível em seu código.

Nós usamos estes ao longo do teste e produção desde como ele aumenta a API Java nativo para Data / Hora problemas é incomparável. Usando estes em testes funciona bem dentro JUnit

Outras dicas

Java permite que você defina o fuso horário padrão (java.util.TimeZone.setDefault). Eu escrevi testes antes de definir o fuso horário para uma variedade de diferentes opções e verificar que tudo ainda funciona. Tenha cuidado, porém -. Se você está parallelising a maioria dos seus testes de unidade, você precisa fazer esses queridos sequencial

Eu sugiro que você teste em alguns fusos horários com o horário de verão se aplica, e alguns sem. Usando um fuso horário australiano é bom também, como DST aplica no momento oposto do ano para o hemisfério norte.

O que é a opinião sobre a conexão com servidores de tempo e recebendo atualizações?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top