Chúng tôi đang làm việc với lượng lớn dữ liệu, tất cả được gắn thẻ trong UTC (bằng Java). Giữa việc đọc dữ liệu này, lưu trữ nó trong một cơ sở dữ liệu và lấy nó ra một lần nữa, nó đã xảy ra, rằng một số dữ liệu đã được tắt một giờ trong thời gian tiết kiệm ánh sáng ban ngày. Vì UTC không có khái niệm về thời gian tiết kiệm ánh sáng ban ngày, đây rõ ràng là một lỗi trong phần mềm. Một khi đã biết, thật dễ dàng để sửa chữa.Kiểm tra xử lý múi giờ chính xác
Tuy nhiên, thật tuyệt khi có một số thử nghiệm đơn vị/tích hợp hoạt động bất kể chênh lệch thời gian hiện tại - ví dụ: Tôi muốn thay đổi múi giờ địa phương và chạy một số phương thức lặp đi lặp lại trong các múi giờ khác nhau này để đảm bảo UTC được xử lý chính xác.
Khi thử nghiệm sẽ chạy tự động và - tốt nhất là - trong một Testsuite, tôi tự hỏi làm thế nào để kiểm tra tốt nhất cho hành vi chính xác. Sẽ dễ dàng thay đổi các thiết lập cục bộ như múi giờ khi khởi động lại JVM, nhưng việc chạy nó trong một bộ kiểm thử không phải là dễ dàng.
Có ai biết môi trường, thư viện hoặc mẫu thử hỗ trợ kịch bản này không? Chúng tôi thường làm việc với JUnit, nhưng mở cửa để thêm môi trường/kỹ thuật khác nếu nó giúp loại bỏ các vấn đề như thế này. Tôi cho rằng đó là một bài kiểm tra tích hợp hơn đơn vị.
Chỉnh sửa: Đã có hai câu trả lời rất hữu ích, nhưng tôi đoán phải có nhiều kỹ thuật hơn ở đó. Có ai có thông tin có thẩm quyền về thời gian/tần suất TimeZone.getDefault sẽ được gọi (xem các bình luận cho câu trả lời của Jon Skeets) không?
Lưu ý: Mặc dù câu hỏi này có câu trả lời được chấp nhận, tôi không hoàn toàn chắc chắn, câu trả lời để chấp nhận. Ngay cả với sự chấp nhận này, tôi cũng muốn thấy nhiều ý tưởng và kỹ thuật hơn.
Cảm ơn bạn đã nhập!
Để biết thêm ý tưởng và kỹ thuật, bạn có thể kiểm tra bài đăng cá nhân về cảnh báo múi giờ Java tại: http://tshikatshikaaa.blogspot.nl/2012/09/about-java-timezone-and-calendar-caveats.html. Để có thời gian hiện tại trên toàn thế giới theo múi giờ, hãy kiểm tra: http://yourworldclocks.juplo.com/ Hy vọng điều này sẽ hữu ích! – JVerstry