-1

現在の時刻を取得する必要があるクラスがありました。そのクラスのテストを書き始めたとき、時間機能を外部クラスに抽象化し、それを元のクラスに注入して、テスト中にモックできるようにしました。これはすべて正常に動作しますが、テストしたい Clock クラスがあります。このクラスをテストするにはどうすればよいですか?

import java.util.Date;

public class Clock {
    public long getCurrentTime() {
        return new Date().getTime();
    }
}

注: 現時点では非常に単純ですが、テストを続けるにつれて、より多くの時間メソッドを含めるように拡張する予定です。

4

1 に答える 1

1

おそらく、このクラスをテストするのは意味がありませんが、たとえば、プロジェクト内でテスト カバレッジが 0% のクラスを持っているのがあなただけである場合など、主張する場合は ;-) ここで解決策を示します。

public void testClock() throws InterupteExcdeption {

  Clock testClock = new Clock();
  long time1 = testClock.getCurrentTime();
  Thread.sleep(1000);
  long time2 = testClock.getCurrentTime();
  assertTrue(time2 > time1);


}



 public void testClock2() throws InterupteExcdeption {

      Clock testClock = new Clock();
      long time1 = testClock.getCurrentTime();
      Thread.sleep(1000);
      long time2 = testClock.getCurrentTime();
      assertTrue(time2 - time1 > 800);

      long time3 = testClock.getCurrentTime();
      long time4 = testClock.getCurrentTime();

      // expecting a value of 0, but make the test defensive, use 100ms
      assertTrue(time4 - time3 < 100);


    }

さらにヒント: クロック クラスはIClockインターフェイスを実装する必要があります。そうしないと、システム クロックをテスト ケースのモックに置き換えることが難しくなります。

IClock の考え方は、たとえば 10 倍高速に実行される MockClock を設定できること、または getCurrentTime() によって返される時間を設定できる場所を設定できることです。

于 2013-10-15T15:03:11.983 に答える