(ジャワ8で追加)javadoc of class Clock引用:
この抽象化の主な目的は、代替クロックが必要等の場合にプラグインできるようにすることです。アプリケーションは、静的メソッドではなく現在の時刻を取得するためにオブジェクトを使用します。これにより、テストが簡単になります。
抽象Clock
クラスのmillis()
メソッドを使用するには、あなたがjava.timeパッケージに与えられた実装を使用することができ、それを拡張する必要はありません。たとえば、次のメソッドを宣言することができます
import java.time.Clock;
public class App {
public static long getMillis(Clock clock){
return clock.millis();
}
}
をあなたにあなたがSystem.currentTimeInMillis()
に直接および静的呼び出しを使用して、むしろ、システムクロックの実装を取得することができAPP:
Clock systemClock = Clock.systemUTC();
System.out.println(getMillis(systemClock));
このアプリのコードが依存しますオペレーティングシステムのクロックでは、結果は各実行時間によって異なります。テストコードで
結果は確定的で予測されているので、あなたが(確かに、多くのテストシナリオのためにあなたがモックオブジェクトを使用します)にかかわらず、テスト時間の、固定クロックのインスタンスを使用することができます。
import static org.junit.Assert.*;
import org.junit.Test;
import java.time.Clock;
import java.time.Instant;
import java.time.ZoneOffset;
@Test public void checkSampleUTCTime(){
Clock fixedClock = Clock.fixed(Instant.parse("2016-04-21T11:54:20.00Z"), ZoneOffset.UTC);
assertEquals(1461239660000L,App.getMillis(fixedClock));
}
DateTimeUtils
クラス(see javadoc)は、setCurrentMillisFixed()
とsetCurrentMillisSystem()
を使用して、java.time.Clock
依存性注入の代わりにシステムクロック動作を交互に使用できるため、より良い選択肢となります。
出典
2016-04-21 21:57:28
Neo
時計用のjavadocを見ましたか?コンストラクターは保護されています。子クラスでのみ使用できます。 –
どうすれば修正できますか?また、クロッククラスを拡張するだけで、私が望まない綿毛の束を追加するように強制します。 – Heiland
もう一度、javadocを読んでください。クロックには、いくつかの種類のクロックを作成できるいくつかの静的メソッドがあります。 –