Domanda

Il mio programma ha una routine quotidiana, simile ad un evento sveglia. Dire, quando è 14:00 (Il tempo è l'ora del sistema nel mio pc), fare qualcosa per me.

Quello che voglio fare è quello di accelerare il periodo di prova (Non voglio davvero aspettare 4 giorni guardando la routine quotidiana e controllare gli errori.) Ho letto su wiki di Mock oggetto , lo scrittore DID programma di sveglia menzione. Ero così felice di vedere, ma ancora, non so come fare.

Sono nuovo di oggetto fittizio, e sto programmazione in Java. Così JMock o EasyMock (o qualsiasi simile) potrebbe va bene per me.

Grazie

È stato utile?

Soluzione

Ogni volta che è necessario per ottenere l'ora corrente, non utilizzare l'orologio di sistema direttamente - utilizzare un'interfaccia come ad esempio:

public interface Clock
{
    long currentMillis();
}

È possibile quindi implementare questo con un orologio di sistema per la produzione, e passare un falso per i test, in cui è possibile impostare il falso per tutto il tempo che vuoi.

Tuttavia, avrete anche bisogno di prendere in giro fuori tutto ciò che sta guidando il vostro sistema -? Stai esplicitamente in attesa di un momento particolare, o fa qualcos'altro chiamare il codice

Altri suggerimenti

devo scusarmi visto che hai chiesto di java e io sono fuori a pranzo quando si tratta di Java, ma una soluzione è prendere in giro l'oggetto DateTime e impostarlo per il tempo desiderato.

In .NET sarebbe simile a questa:

public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

SystemTime.Now = () => new DateTime(2000,1,1);

Da: Trattare con il tempo in Test


  

... [A] programma orario n allarme che provoca una   campana per suonare a una certa ora potrebbe   ottenere il tempo corrente dall'esterno   mondo. Per verificare ciò, il test deve   attendere fino a quando l'ora della sveglia per sapere   se ha suonato il campanello   correttamente. Se un oggetto fittizio viene utilizzato in   luogo dell'oggetto reale, può essere   programmato per fornire la campane   tempo (se si tratta di realtà che il tempo   o no) in modo che la sveglia   programma può essere testato in isolamento.

Questa sveglia che stai riferimento è dando un esempio di un oggetto di scherno. Non è in realtà un oggetto è possibile utilizzare dal quadro finto.

In sostanza ciò che si fa nel test è falso gli eventi orologio. Esattamente come dipende un po 'sul design, e come si è in attesa per l'evento, ma per mantenerlo semplice (se non pura) il mio approccio sarebbe quello di avere un metodo che viene chiamato quando viene attivato l'evento tempo, e quindi verificare entrambi i lati di questo.

Per prima cosa è quello di testare la chiamata al metodo e vedendo che l'evento programmato fa quello che ci si aspetta. Poi deridere quella classe (con JMock il modo migliore è quello di rendere l'interfaccia e il vostro metodo chiamante implementare tale interfaccia).

È quindi passa il mock alla classe che gestisce i tempi. Anche in questo caso, vorrei astratto il threading / scatenanti problemi (come il controllo l'orologio di sistema e l'avvio del filo) e hanno schernisce i valori che vengono eseguiti in sostanza l'evento subito tornare.

Poi mantenere il codice vero e proprio che legge in realtà l'orologio di sistema e avvia il filo più piccolo possibile, e che sarà l'area che non è sotto unit test.

Mocking riferisce a unit test. Per la funzionalità che si sta descrivendo vorrei separare il grilletto (nel tuo caso l'evento sveglia) dal processo (qualunque esso sia il vostro 'routine quotidiana' sta facendo) e unit test la funzionalità di processo.

Poi dirigere la vostra attenzione al codice di programmazione che richiamerà la funzionalità del processo. Ti consiglio di utilizzare qualcosa come quarzo per questo, ma se avete intenzione di ruolo-vostra -Proprio il test di unità per poter lavorare con l'orologio di sistema effettivo previsto di assegnare il tempo di scatto in base al valore corrente del clock di sistema come tutto quello che vuole testare per è che si verifica l'evento di trigger.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top