我们正在处理大量数据,所有数据都以 UTC(Java)标记。在读取这些数据、将其存储在数据库中并再次将其取出之间,发生了一些数据在夏令时关闭了一小时。由于 UTC 没有夏令时的概念,这显然是软件中的一个错误。一旦知道,就很容易修复。
但是,无论当前时差如何,有一些单元/集成测试都可以工作会很好 - 例如,我想更改本地时区并在这些不同时区内一遍又一遍地运行一些方法以确保UTC 处理正确。
由于测试应该自动运行,并且最好在一个测试套件中运行,我想知道如何最好地测试正确的行为。在重新启动 JVM 时更改本地设置(如时区)很容易,但在测试套件中运行它并不容易。
有人知道支持这种场景的测试环境、库或模式吗?我们通常使用 JUnit,但如果它有助于摆脱此类问题,我们也愿意添加其他环境/技术。我想它是一个集成而不是单元测试。
编辑:已经有两个非常有用的答案,但我想那里必须有更多的技术。是否有人拥有有关何时/多久调用 TimeZone.getDefault 的权威信息(请参阅 Jon Skeets 答案的评论)?
注意:即使这个问题有一个公认的答案,我也不完全确定要接受哪个答案。即使有这种接受,我也希望看到更多的想法和技术。
感谢您的输入!