Gibt es eine Möglichkeit, um Unit-Test ScheduledExecutorService.scheduleAtFixedRate ohne Thread.sleep zu verwenden?

stimmen
0

Ich würde eine Klasse Unit-Test wie eine bestimmte Aufgabe mit ScheduledExecutorService.scheduleAtFixedRate ausführt, und ich kann nicht einen Weg zu „Zeitplan“ mehr Läufen der Aufgabe in einem Gerät zu testen, ohne Thread.sleep, die langsam finden und nicht als genau wie Ich mag würde. Gibt es eine Möglichkeit, eine verspott Zeitreferenz auf den Testamentsvollstrecker Dienst oder andere Abhilfen zu passieren, den Zeitablauf zu simulieren?

Veröffentlicht am 02/12/2019 um 23:59
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Unit Tests Verhalten überprüfen Sie den Code isoliert von seinen Abhängigkeiten.

Die Implementierungen ScheduledExecutorServicewerden von der JVM zur Verfügung gestellt und daher nicht den Code, sondern eine Abhängigkeit , die mit einem ersetzt werden müssen Testdoppel während Unittesting Code. (Es könnte eine gültige Setup für einen Test sein , dass die Bedürfnisse ScheduledExecutorServiceImplementierung ausgeführt werden, aber dies ist kein Unit - Test dann.)

Also, falls Sie einen Komponententest schreiben (und nicht eine andere Art von Test wie zB Integrationstests , welche die zu verwenden geschieht JUnit framwork ) sollten Sie eine erstellen Mock für die ScheduledExecutorServiceSchnittstelle unter Verwendung eines Mockframework (wie Mockito oder gleich) und überprüfen, ob Sie den Code der gewünschten Methode auf dem Mock aufruft.

Um Ihren Test für diese Überprüfung zu ermöglichen sollten Sie injizieren die Umsetzung der ScheduledExecutorServiceSchnittstelle in Ihren Code (vorzugsweise über Konstruktor Injektion ) und nicht über Ihr Gerät im Test es selbst zu erwerben, so dass Sie eine haben Naht , an dem Sie die reale Umsetzung austauschen können ScheduledExecutorServiceSchnittstelle whith der mock zum Zwecke der Komponententests.

Beantwortet am 03/12/2019 um 01:29
quelle vom benutzer

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