3

我有一个单元测试来检查以确保在我的实例中创建一个对象时填充了正确的日期:

    Date earlier = new Date();
    Thread.sleep(10);
    instance.execute();
    assertTrue(instance.getMyObject.getCreationDate().after(earlier));

当在 Eclipse 中运行或从命令行使用 Ant 时,此测试适用于我在 Windows 7 Java 6 上。但是,我的客户说这个测试对他来说失败了(他没有指定他的环境)。这怎么可能?

4

3 回答 3

8

在 Windows XP 上,时钟分辨率仅为 1/60 秒。这意味着您可以等待 10 毫秒,时钟时间将显示相同。我会将时间增加到 100 到 250 毫秒。

于 2012-04-10T13:08:59.973 回答
3

System.currentTimeMillis 在不同平台上具有不同的“分辨率”。在 Windows 上,它可能是 15 毫秒 - 这意味着您的 10 毫秒等待可能不一定会导致“更晚”的日期。

我会增加Thread.sleep(10)toThread.sleep(100)或更多。

于 2012-04-10T13:11:02.837 回答
1

正如 Peter Lawrey 所回答的,系统时钟的分辨率可能意味着它在创建“较早”日期和实例日期之间没有更新。也许将您的代码更改为以下内容:

assertFalse(instance.getMyObject.getCreationDate().before(earlier));

通过这种方式,您可以检查它绝对不是早于您的较早日期,并且您无需担心系统时钟是否已更新。

于 2012-04-10T13:12:28.767 回答