2012-04-10 3 views
3

私は、インスタンス内のオブジェクトが取り込まれ、適切な日付を使用して作成されていることを確認するためにチェックするユニットテストを持っている:Java Thread.sleepまたはDate.after()は、他のコンピュータで機能が異なるのはなぜですか?

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

からEclipseでまたはAntで実行されている場合は、このテストでは、Windows 7のJava 6の上に私の作品コマンドライン。 しかし、私のクライアントは、このテストは彼(彼は彼の環境を指定していない)には失敗していると言います。これはどうやってできるの?

+0

'instance.getMyObject.getCreationDate()'これを置き換えるコードは何ですか? –

+0

assertTrueのString引数を使用して、両方の値が同じ/異なる理由を理解するのに役立つ情報を出力することをお勧めします。 – oers

答えて

8

Windows XPでは、クロック解像度は1/60秒です。これは、10ミリ秒待つことができ、時計の時間が同じになることを意味します。私は100から250ミリ秒に時間を増加させるでしょう。

3

System.currentTimeMillisは、プラットフォームによって異なる「解像度」を持っています。 Windowsの場合、15msにすることができます。これは、10msの待ち時間が必ずしも「遅い」日付になるとは限りません。

は私がThread.sleep(10)Thread.sleep(100)以上に増加するであろう。

1

Peter Lawreyが答えているように、システムクロックの解像度は、「以前の」日付とインスタンス日付の作成の間に更新していない可能性があります。

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

あなたは、それは間違いなくあなたの以前の日付の前にいないことを確認している。この方法は、あなたは、システムクロックを更新したかどうかを心配する必要はありません。おそらく、次のようにコードを変更します。

関連する問題