Ein Ansatz, der am besten für Komponententests funktioniert, ist die Zusammenfassung der Art und Weise, wie auf die aktuelle Zeit in Ihrem Code zugegriffen wird.
Anstatt System.currentTimeMillis() direkt aufzurufen, können Sie eine eigene Implementierung bereitstellen.
So etwas wie diese (Pseudocode):
class MyTime {
private static TimeInterface CurrentTimeInterface = new DefaultTimeImpl();
public setTimeInterface(TimeInterface timeInterface) {
CurrentTimeInterface = timeInterface;
}
public int getTime() { CurrentTimeInterface.getTime(); }
}
class DefaultTimeImpl implements TimeInterface {
public int getTime() { return System.currentTimeMillis(); }
}
class TestTimeImpl implements TimeInterface {
private int CurrentTimeMillis = 0;
public int getTime() { return CurrentTimeMillis; }
public void setTime(int timeMillis) { CurrentTimeMillis = timeMillis}
public void sleep(int millis) { CurrentTimeMillis += millis; }
}
Dann überall würden Sie System.getTimeMillis() statt rufen MyTime.getTime() aufgerufen haben. Wenn Sie Ihren Code testen, erstellen Sie einfach ein TestTimeImpl und rufen MyTime.setTimeInterface (testTimeImpl) auf. Wenn Sie Zeit für die Weiterleitung benötigen, rufen Sie testTimeImpl.sleep() oder testTimeImpl.setTime() auf.
Damit können Sie jede Zeit bis zur Millisekunde simulieren.
Ruft das Programm beim Systemaufruf "time" und "date" auf? –
was ist mit einem Skript Einstellung der Zeit jede Sekunde eine Sekunde auseinander :) –
Ist dieses Programm auf eine Datenbank oder andere externe Programme angewiesen? – jmucchiello