Esiste un modo per test di unità ScheduledExecutorService.scheduleAtFixedRate senza usare Thread.sleep?

voti
0

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?

È pubblicato 02/12/2019 alle 23:59
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Unit test verificare il comportamento del proprio codice in isolamento dalle sue dipendenze.

Le implementazioni di ScheduledExecutorServicesono 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' ScheduledExecutorServiceimplementazione 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' ScheduledExecutorServiceinterfaccia 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 ScheduledExecutorServiceinterfaccia 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 ScheduledExecutorServiceinterfaccia whith il mock allo scopo di unit test.

Risposto il 03/12/2019 a 01:29
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more