Vorrei unit test una classe che esegue un compito utilizzando ScheduledExecutorService.scheduleAtFixedRate, e non riesco a trovare un modo per schedule più esecuzioni del compito in una prova di unità senza utilizzare Thread.sleep, che è lento e non come preciso come vorrei. C'è un modo per passare un tempo di riferimento deriso al servizio di esecutore o altre soluzioni alternative per simulare il passare del tempo?
Esiste un modo per test di unità ScheduledExecutorService.scheduleAtFixedRate senza usare Thread.sleep?
Unit test verificare il comportamento del proprio codice in isolamento dalle sue dipendenze.
Le implementazioni di ScheduledExecutorService
sono forniti dalla JVM e quindi non il codice, ma una dipendenza che deve essere sostituita con un test di doppia mentre unit testing codice. (Ci potrebbe essere una configurazione valida per un test che ha bisogno l' ScheduledExecutorService
implementazione da eseguire, ma questa non è una prova di unità , allora.)
Quindi, nel caso in cui si sta scrivendo uno unit test (e non qualche altro tipo di test come ad esempio i test di integrazione , che sembra essere utilizzando il framwork JUnit ) è necessario creare un finto per l' ScheduledExecutorService
interfaccia con un quadro di scherno (come Mockito o simili) e verificare che il codice chiama il metodo desiderato sul finto.
Per attivare il test per questa verifica si deve iniettare l'attuazione di ScheduledExecutorService
interfaccia nel codice (preferibilmente tramite iniezione del costruttore ) e non avere l'unità in prova acquisendo essa stessa, in modo da avere una cucitura a cui è possibile scambiare l'implementazione reale di ScheduledExecutorService
interfaccia whith il mock allo scopo di unit test.