当前位置:  开发笔记 > 编程语言 > 正文

测试正确的时区处理

如何解决《测试正确的时区处理》经验,为你挑选了2个好方法。

我们正在处理大量数据,所有数据都以UTC(Java)标记.在读取这些数据,将其存储在数据库中并再次将其取出之前,有些数据在夏令时期间关闭了一小时.由于UTC没有夏令时的概念,这显然是软件中的一个错误.一旦知道,它很容易修复.

但是,无论当前时差如何,都可以使用一些单元/集成测试 - 例如我想更改本地时区并在这些不同时区内反复运行某些方法以确保UTC处理正确.

由于测试应该自动运行 - 最好是 - 在一个Testsuite中,我想知道如何最好地测试正确的行为.在重新启动JVM时更改本地设置(如时区)很容易,但在测试套件中运行它并不容易.

有没有人知道支持这种情况的测试环境,库或模式?我们通常使用JUnit,但如果有助于摆脱这样的问题,我们可以添加其他环境/技术.我想这是一个集成而不是单元测试.

编辑:已经有两个非常有用的答案,但我想必须有更多的技术.有没有人有关于调用TimeZone.getDefault的时间/频率的权威信息(请参阅Jon Skeets答案的评论)?

注意:即使这个问题有一个公认的答案,我也不完全确定,接受哪个答案.即使有了这种接受,我也希望看到更多的想法和技巧.

感谢您的输入!



1> Jon Skeet..:

Java允许您设置默认时区(java.util.TimeZone.setDefault).我之前已经编写过测试,将时区设置为各种不同的选项,并检查一切是否仍然有效.但请注意 - 如果您要对大多数单元测试进行并行化,则需要将这些单元测试按顺序进行.

我建议你在一些时区测试,夏令时适用,有些没有.使用澳大利亚时区也很好,因为夏令时适用于一年中相反的时间到北半球.



2> j pimmel..:

我建议您查看JodaTime,它提供了一些糖来帮助您在代码中更清晰地管理日期/时间/ TimeZone类型问题.

我们在整个测试和生产过程中使用它们,因为它如何为日期/时间问题提升原生Java API是无与伦比的.在测试中使用这些可以在JUnit中正常工作

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有