Is er een manier om unit test ScheduledExecutorService.scheduleAtFixedRate zonder gebruik te maken Thread?

stemmen
0

Ik wil graag unit test een klasse die een taak met behulp van ScheduledExecutorService.scheduleAtFixedRate uitvoert, en ik kan een manier om schema meerdere runs van de taak in een unit test niet vinden zonder gebruik te maken Thread.sleep, die is traag en niet zo precies zoals ik zou willen. Is er een manier om een ​​Bespotte tijd verwijzing naar de uitvoerder dienst of andere oplossingen om de doorgang van de tijd te simuleren passeren?

De vraag is gesteld op 02/12/2019 om 23:59
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Unit Tests controleren gedrag van uw code in isolatie van zijn afhankelijkheden.

De implementaties van ScheduledExecutorServiceworden geleverd door de JVM en dus niet de code, maar een afhankelijkheid die moet worden vervangen door een proef dubbele terwijl Unittesten uw code. (Er kan een geldige setup voor een test die het nodig heeft ScheduledExecutorServiceimplementatie worden uitgevoerd, maar dit is niet een unit test dan.)

Dus in het geval u het schrijven van een unit test (en niet een ander soort test als ie integratie testen , dat gebeurt te zijn met behulp van de JUnit framwork ) moet u het creëren van een mock voor de ScheduledExecutorServiceinterface met behulp van een spottende kader (zoals Mockito of iets dergelijks) en controleren of uw code noemt de gewenste methode op de mock.

Als u uw test voor deze controle in staat moet u injecteren de uitvoering van de ScheduledExecutorServiceinterface in uw code (bij voorkeur via constructeur injectie ) en niet over uw eenheid tijdens het testen verwerven zij zelf, zodat u een naad waar u de daadwerkelijke uitvoering van kunnen uitwisselen ScheduledExecutorService-interface breken de mock behoeve van unit testen.

antwoordde op 03/12/2019 om 01:29
bron van user

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