Un approccio che funziona meglio per il test delle unità è quello di astrarre il modo in cui l'ora corrente è accessibile nel codice.
Invece di chiamare direttamente System.currentTimeMillis() è possibile fornire la propria implementazione.
Qualcosa di simile (pseudo-codice):
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; }
}
Quindi, ovunque si avrebbe chiamato System.getTimeMillis() invece chiamare MyTime.getTime(). Quando esegui il test del codice, crea semplicemente un TestTimeImpl e chiama MyTime.setTimeInterface (testTimeImpl). Quindi, quando si desidera che il tempo faccia avanzare la chiamata testTimeImpl.sleep() o testTimeImpl.setTime().
Ciò consente di simulare qualsiasi momento fino al millisecondo.
fonte
2009-03-08 19:44:35
Il programma chiama "ora" e "data" con la chiamata di sistema? –
cosa dire di avere uno script che imposta l'ora ogni secondo un secondo a parte :) –
Questo programma si basa su un database o altri programmi esterni? – jmucchiello