我们用大量的数据,所有标记在UTC(在Java中)工作。悦读这个数据,它存储在数据库中,并再次得到它,它发生了,那在夏令时有些数据相差一个小时。作为UTC没有夏令时的概念,这是明显地在软件中的错误。一旦知道,这是很容易解决。

然而,它会是好的,有一些工作,而不管当前的时间差的单元/集成测试 - 例如我想更改本地时区,而这些不同的时区里一遍又一遍运行一些方法,以确保UTC正确处理。

作为测试应该自动运行和 - 优选 - 一个测试工具内,我想知道如何为正确的行为最佳的测试。这将会是很容易在重新启动JVM改变像时区的本地设置,而是一个测试套件内运行,这不是那么容易。

是否有人知道测试环境,图书馆或图案支撑此方案的?我们通常使用JUnit的工作,但开放加入另一个环境/技术,如果它可以帮助摆脱这样的问题。我想,它的而不是单元测试的集成 - 。

修改:现在已经有两个非常有用的答案,但我想一定有更多的技术在那里。有谁知道什么时候/ TimeZone.getDefault多久会被调用(见注释乔恩长柄水杓接听)权威的信息?

注意:尽管这个问题有一个公认的答案,我不能完全肯定,这回答接受。即使有这种接受,我想看到更多的思想和技术。

感谢您的输入!

有帮助吗?

解决方案

我建议你看看 JodaTime 提供了一些糖,以帮助管理日期/时间/时区类型的问题更清晰地在你的代码。

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

其他提示

Java允许您设置默认的时区(java.util.TimeZone.setDefault)。我笔试前设置时区,以各种不同的选项,并检查一切仍然有效。不过要小心 - 如果你parallelising大部分的单元测试,你需要做这些的顺序

我建议你在一些时区夏令时测试应用,以及一些没有。使用澳大利亚的时区一样好,因为DST适用于今年北半球相反的时间。

什么是有关连接到时间服务器并获得更新的意见?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top