【发布时间】:2010-10-03 10:33:49
【问题描述】:
我们正在处理大量数据,所有数据都以 UTC(Java)标记。在读取这些数据、将其存储在数据库中并再次将其取出之间,发生了一些数据在夏令时关闭了一小时。由于 UTC 没有夏令时的概念,这显然是软件中的一个错误。一旦知道,就很容易修复。
但是,如果有一些单元/集成测试不管当前时差如何都能正常工作,那就太好了 - 例如我想更改本地时区并在这些不同的时区一遍又一遍地运行一些方法,以确保正确处理 UTC。
由于测试应该自动运行,并且最好在一个测试套件中运行,我想知道如何最好地测试正确的行为。在重启 JVM 时更改本地设置(如时区)很容易,但在测试套件中运行它并不容易。
有人知道支持这种场景的测试环境、库或模式吗?我们通常使用 JUnit,但如果它有助于摆脱此类问题,我们也愿意添加其他环境/技术。我想这更像是一个集成而不是单元测试。
编辑:已经有两个非常有用的答案,但我想肯定还有更多的技巧。是否有人掌握有关何时/多久调用 TimeZone.getDefault 的权威信息(请参阅 cmets 以获取 Jon Skeets 的答案)?
注意:尽管这个问题有一个可接受的答案,但我并不完全确定该接受哪个答案。即使有这种接受,我也希望看到更多的想法和技术。
感谢您的意见!
【问题讨论】:
-
有关更多想法和技术,您可以查看关于 Java 时区警告的个人帖子:tshikatshikaaa.blogspot.nl/2012/09/…。要获取每个时区的当前世界时间,请查看:yourworldclocks.juplo.com希望这会有所帮助!