Jeg vil gjerne enheten test en klasse som utfører en oppgave ved hjelp ScheduledExecutorService.scheduleAtFixedRate, og jeg kan ikke finne en måte å planlegge flere kjøringer av oppgaven i en enhet test uten å bruke Thread.sleep, som er treg og ikke så presis som jeg ønsker. Er det noen måte å passere en hånet tid referanse til byrder tjenesten eller andre løsninger for å simulere tidens gang?
Er det en måte å enhetstest ScheduledExecutorService.scheduleAtFixedRate uten å bruke Thread.sleep?
Enhet tester bekrefte oppførselen koden din i isolasjon fra sine avhengigheter.
Implementeringer av ScheduledExecutorService
er gitt av JVM, og derfor ikke koden din, men en avhengighet som må erstattes med en test dobbel mens enhetstesting koden din. (Det kan være en gyldig oppsett for en test som må ScheduledExecutorService
gjennomføre for å bli henrettet, men dette er ikke en enhet test da.)
Så i tilfelle du skriver en enhetstest (og ikke noen annen form for test som vil si integrasjonstester , som skjer for å være med JUnit framwork ) du bør lage en mock for ScheduledExecutorService
grensesnitt ved hjelp av en tentamen rammeverk (som Mockito eller alike) og bekrefte at koden kaller den ønskede metoden på mock.
Å aktivere test for denne bekreftelses bør man injisere implementering av ScheduledExecutorService
grensesnittet i kode (fortrinnsvis via konstruktør injeksjon ) og ikke har den enhet som prøves skaffe den selv, slik at man har en søm i hvilken kan man utveksle reell implementering av ScheduledExecutorService
grensesnittet whith mock for det formål å enhetstesting.