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?
Gibt es eine Möglichkeit, um Unit-Test ScheduledExecutorService.scheduleAtFixedRate ohne Thread.sleep zu verwenden?
Unit Tests Verhalten überprüfen Sie den Code isoliert von seinen Abhängigkeiten.
Die Implementierungen ScheduledExecutorService
werden 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 ScheduledExecutorService
Implementierung 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 ScheduledExecutorService
Schnittstelle 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 ScheduledExecutorService
Schnittstelle 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 ScheduledExecutorService
Schnittstelle whith der mock zum Zwecke der Komponententests.