Wie um zu testen, Spring @Eingeplant
Wie kann ich testen, @Scheduled
beruflichen Aufgaben in meinem spring-boot-Anwendung?
package com.myco.tasks;
public class MyTask {
@Scheduled(fixedRate=1000)
public void work() {
//task execution logic
}
}
- Was willst du genau testen? Wenn Sie testen möchten, dass die Arbeit() das tut, was es tun soll, können Sie es testen, wie jede andere Methode von einem anderen bean: Sie erstellen eine Instanz der bean, rufen Sie die Methode und testen, dass es tut, was es tun soll. Wenn Sie möchten, um zu testen, ob die Methode tatsächlich aufgerufen wird, durch Frühling, jede Sekunde, es gibt keinen richtigen Zeitpunkt: Frühjahr getestet hat, dass für Sie.
- Ich Stimme Ihnen zu, versuchen zu testen, den Rahmen für die Funktionalität nicht notwendig erscheinen, für mich, aber ich war erforderlich, um. Ich fand eine Arbeit um für diese, indem du einen kleinen log-Meldung und überprüfung, ob die erwartete Nachricht war in der Tat angemeldet, für den erwarteten Zeitrahmen.
- Ein weiterer Vorteil des Tests ist, um ein Versagen zu testen, ob die
@EnableScheduling
Anmerkung wird entfernt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn wir davon ausgehen, dass Ihr Auftrag ausgeführt wird, in einem so kleinen Abständen, dass Sie wirklich wollen, dass Ihr test, um zu warten, für den Auftrag ausgeführt werden, und Sie wollen einfach nur, um zu testen, ob-job aufgerufen wird, können Sie folgende Lösung:
Hinzufügen Awaitility zu classpath:
Schreiben test ähnlich:
verify()
undtimes()
Funktionen können nicht gefunden werden. Könnten Sie das Paket angeben?org.mockito.Mockito#verify
und ähnliche fürtimes
.Meine Frage ist: "was wollen Sie denn testen?"
Wenn Ihre Antwort
"Ich will wissen, dass der Frühling läuft mein geplanter task, wenn ich es wollte",
dann sind Sie testen, Frühling,
nicht Ihr code.
Dies ist nicht etwas, das Sie brauchen, um unit-test.
Wenn Ihre Antwort ist "ich will wissen, konfigurierte ich meine Aufgabe korrekt",
dann schreiben Sie eine test-app mit einem Häufig ausgeführten Aufgabe und stellen Sie sicher, dass
die Aufgabe wird ausgeführt, wenn Sie erwarten, dass es zu laufen.
Dies ist kein unit-test,
aber wird zeigen, dass Sie wissen, wie Sie Ihr text korrekt.
Wenn die Antwort "ich will wissen, dass die Aufgabe, die ich schrieb richtig funktioniert",
dann müssen Sie die unit-test die Methode der Aufgabe.
In deinem Beispiel
Sie möchten unit-test der
work()
Methode.Tun Sie dies, indem Sie ein Gerät testen, dass direkt ruft Ihre Aufgabe Methode (
work()
).Zum Beispiel,
Dies ist oft schwer. Sie können prüfen, zu laden Spring-Kontext, die während der test-und gefälschte einige Bohnen aus, um in der Lage sein, um zu überprüfen, geplanter Aufruf.
Ich habe zum Beispiel in meinem Github-repo. Es ist eine einfache, geplante Beispiel getestet, mit dem beschriebenen Ansatz.
diese Klasse steht für die Erzeugung Scheduler cron mit springframework Planung
hier ist die Protokollierung der Ausgabe:
Wir können mindestens zwei Ansätze, um zu testen, geplante Aufgaben mit Feder:
Wenn wir Frühling starten wir gonna müssen Sie die folgenden Abhängigkeiten:
Könnten wir hinzufügen einer
count
zu denTask
und erhöhen es in derwork
Methode:Dann überprüfen Sie die
count
:In diesem Fall müssen wir hinzufügen, die Awaitility Abhängigkeit:
Durch und nutzen die DSL-überprüfen Sie die Anzahl der Aufrufe der Methode
work
:Müssen wir nehmen in der Anzahl, dass, obwohl Sie gut sind es ist besser, sich auf die unit Tests für die Logik innerhalb der Methode.
Ich ein Beispiel setzen hier.