문제

우리는 모두 UTC(Java)로 태그가 지정된 대량의 데이터로 작업하고 있습니다.이 데이터를 읽고 데이터베이스에 저장하고 다시 가져오는 사이에 일광 절약 시간 동안 일부 데이터가 한 시간 동안 중단되는 일이 발생했습니다.UTC에는 일광 절약 시간제에 대한 개념이 없으므로 이는 분명히 소프트웨어 내의 버그였습니다.일단 알고 나면 고치기가 쉽습니다.

그러나 현재 시차에 관계없이 작동하는 일부 단위/통합 테스트를 갖는 것이 좋을 것입니다.현지 시간대를 변경하고 이러한 다른 시간대 내에서 몇 가지 메서드를 반복해서 실행하여 UTC가 올바르게 처리되는지 확인하고 싶습니다.

테스트는 자동으로 실행되어야 하며 가급적이면 하나의 Testsuite 내에서 실행되어야 하므로 올바른 동작을 가장 잘 테스트하는 방법이 궁금합니다.JVM을 다시 시작할 때 시간대와 같은 로컬 설정을 변경하는 것은 쉽지만 이를 테스트 스위트 내에서 실행하는 것은 쉽지 않습니다.

이 시나리오를 지원하는 테스트 환경, 라이브러리 또는 패턴을 아는 사람이 있습니까?우리는 일반적으로 JUnit을 사용하여 작업하지만 이와 같은 문제를 제거하는 데 도움이 된다면 다른 환경/기술을 추가할 의향이 있습니다.나는 그것이 단위 테스트보다는 통합이라고 생각합니다.

편집하다:이미 두 가지 매우 유용한 답변이 있지만 더 많은 기술이 있을 것 같습니다.TimeZone.getDefault가 언제/얼마나 자주 호출되는지에 대한 권위 있는 정보를 가진 사람이 있습니까(Jon Skeets 답변에 대한 설명 참조)?

메모:이 질문에 허용된 답변이 있더라도 어떤 답변을 수락해야 할지 완전히 확신할 수 없었습니다.이번 승인에도 불구하고 더 많은 아이디어와 기술을 보고 싶습니다.

귀하의 의견에 감사드립니다!

도움이 되었습니까?

해결책

꼭 확인해 보시는 걸 추천드려요 조다타임 이는 코드에서 날짜/시간/TimeZone 유형 문제를 더 읽기 쉽게 관리하는 데 도움이 되는 약간의 설탕을 제공합니다.

날짜/시간 문제에 대한 기본 Java API를 향상시키는 방법이 비교할 수 없을 만큼 뛰어나기 때문에 테스트 및 생산 전반에 걸쳐 이를 사용합니다.테스트에서 이를 사용하면 JUnit 내에서 잘 작동합니다.

다른 팁

Java를 사용하면 기본 시간대(java.util.TimeZone.setDefault)를 설정할 수 있습니다.시간대를 다양한 옵션으로 설정하고 모든 것이 여전히 작동하는지 확인하기 위해 이전에 테스트를 작성했습니다.하지만 주의하세요. 대부분의 단위 테스트를 병렬화하는 경우 이러한 테스트를 순차적으로 만들어야 합니다.

일광 절약 시간이 적용되는 시간대와 적용되지 않는 시간대에서 테스트해 보시기 바랍니다.DST가 북반구와 반대되는 시간에 적용되므로 호주 시간대를 사용하는 것도 좋습니다.

시간 서버에 연결하고 업데이트를 받는 것에 대한 의견은 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top