gpt4 book ai didi

java - 测试正确的时区处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:05 25 4
gpt4 key购买 nike

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

但是,如果有一些单元/集成测试无论当前时差如何都有效,那就太好了——例如我想更改本地时区并在这些不同时区内一遍又一遍地运行一些方法,以确保正确处理 UTC。

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

有人知道支持这种情况的测试环境、库或模式吗?我们通常使用 JUnit,但如果它有助于解决此类问题,我们愿意添加其他环境/技术。我想这更像是一个集成而不是单元测试。

编辑:已经有两个非常有用的答案,但我想肯定还有更多的技巧。是否有人有关于何时/多久调用 TimeZone.getDefault 的权威信息(请参阅 Jon Skeets 答案的评论)?

注意:尽管这个问题有一个可接受的答案,但我并不完全确定应该接受哪个答案。即使获得了这种认可,我也希望看到更多的想法和技术。

感谢您的意见!

最佳答案

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

我建议您在某些适用夏令时的时区进行测试,而另一些则不适用。使用澳大利亚时区也很好,因为夏令时适用于北半球一年中相反的时间。

关于java - 测试正确的时区处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/477965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com