unter Angabe der javadoc of class Clock (hinzugefügt in Java-8):
Der primäre Zweck dieser Abstraktion abwechselnde Takten so eingesteckt werden, damit ist, und, wenn erforderlich. Anwendungen verwenden ein Objekt, um die aktuelle Zeit statt einer statischen Methode zu erhalten. Dies kann das Testen vereinfachen.
Um die millis()
Methode der abstrakten Clock
Klasse zu verwenden, müssen Sie es nicht verlängern, Sie gegeben Implementierungen in java.time Paket verwenden können.
import java.time.Clock;
public class App {
public static long getMillis(Clock clock){
return clock.millis();
}
}
In Ihrem Sie App können Sie eine Systemuhr Implementierung zu bekommen, sondern eine direkte und statische Berufung System.currentTimeInMillis()
mit: Zum Beispiel können Sie die folgende Methode deklarieren
Clock systemClock = Clock.systemUTC();
System.out.println(getMillis(systemClock));
Diese App Code hängt auf dem Betriebssystemtakt und es Ergebnis variiert zwischen jeder Laufzeit.
In Ihrem Testcode können Sie einen festen Takt Beispiel verwenden, so dass die Ergebnisse sind deterministisch und vorhersehbar, unabhängig von der Testzeit (Sicherlich für viele Testszenarien würden Sie ein Mock-Objekt verwenden):
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));
}
Außerdem würden einige sagen, dass joda Zeit DateTimeUtils
Klasse (see javadoc) schönere Option ist - da Sie setCurrentMillisFixed()
und setCurrentMillisSystem()
abzuwechseln die Systemuhr Verhalten, statt java.time.Clock
Dependency Injection verwenden können.
Haben Sie sich das Javadoc für Clock angesehen? Der Konstruktor ist geschützt: Nur für untergeordnete Klassen verfügbar. –
Also, wie repariere ich es? Auch wenn ich nur die Uhrklasse verlängere, zwinge ich mich dazu, einen Haufen Flusen hinzuzufügen, die ich nicht haben will. – Heiland
Lesen Sie erneut das Javadoc. Clock verfügt über mehrere statische Methoden, mit denen verschiedene Arten von Clocks erstellt werden können. –