Was hat dies zu tun: @RunWith(SpringJUnit4ClassRunner.class)
Was hat diese Anmerkung zu tun?
Wann würde ich es nutzen will?
Wenn würde ich nicht wollen, es zu benutzen?
@RunWith(SpringJUnit4ClassRunner.class)
Kann ich finde weitere Verwendungen dieser, wenn ich Google und finde nicht eine 101 Erklärung dafür, was diese Anmerkung soll mit mir zu kommunizieren oder Wann/warum ich es verwenden würde?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die annotation wird verwendet, um zu konfigurieren, dass ein unit-test, dass die erforderlichen Spring dependency injection.
Vom Frühjahr Referenz - 10. Unit-Tests:
spring-batch
Abschnitt der Feder docs.Wenn Sie mit Annotationen statt XML-Dateien, die dann jede Klasse, die Sie sind unit-Tests erfordert Spring dependency injection werden muss, in der
@ContextConfiguration
annotation. Zum Beispiel:Nun, wenn Sie verwenden fooManager in einem unit-test es wird ein Spring-Kontext setup.
Wenn fooManager autowires in irgendeiner Bohnen werden dann die bean-Klassen müssen auch in der
@ContextConfiguration
annotation. Also, wenn die FooManager bean autowires in einem FooReporter bean:Wenn die Bohnen, die fooManager autowires in enthalten Zustand, dann werden Sie wahrscheinlich wollen, um zurücksetzen den Zustand der Bohnen für jeden test. In diesem Fall können Sie die
@DirtiesContext
Anmerkung zu Ihrem test-Klasse:Wenn die fooManager oder seine autowired Bohnen liest Frühjahr config, dann müssen Sie eine Initialisierungen Liste der
@ContextConfiguration
Anmerkung, dass die ConfigFileApplicationContextInitializer Klasse:Beantworten, wenn Sie die würde und würde nicht wollen, es zu benutzen Teil der Frage.
Wann SpringJUnit4ClassRunner
IMO SpringJUnit4ClassRunner sollte sehr sparsam verwendet werden. Es ist ein erheblicher Aufwand bei der Gründung einer Feder Behälter zum ausführen von unit Tests.
Ich in der Regel verwenden SpringJUnit4ClassRunner zu testen:
Zumindest ich habe immer eine einfache SpringJUnit4ClassRunner test als eine Plausibilitätsprüfung, dass die Spring-container startet OK.
Wenn Sie injizieren Komponenten Probleme entstehen können, wenn der
@Qualifier
annotation nicht verwendet oder falsch verwendet. Ein sanity-check-test wird aufzeigen, wie Probleme.Beim laden der Konfiguration aus mehrere yaml-Dateien möchten Sie vielleicht, um zu testen, die Karten werden zusammengeführt, wie erwartet, mit den entsprechenden überschreibt Auftritt.
Wenn Sie nicht zu benutzen SpringJUnit4ClassRunner
Würde ich nicht verwenden, SpringJUnit4ClassRunner zu testen, die nicht-Feder-bezogenen Funktionen in meinem code unter test. Aus meiner Erfahrung bedeutet das die meisten Funktionen.
So bedeutet dies, dass jede autowired Komponenten und injiziert config-Daten benötigt werden verspottet. Dies kann bedeuten, dass einiges an setup-code für Ihre unit-tests. Jedoch ist dieser setup-code muss nur einmal geschrieben für alle tests in Ihrer Klasse unter test. Es ist auch viel schneller zum ausführen von unit-tests mit verspottet Komponenten.
Halte ich den Spott einfach und verwenden Spock zu verspotten die Komponenten. Beispiel groovy-code:
In diesem Beispiel die Klasse unter test
FooManager
hat eine autowiredFooReporter
die selbst enthält eine autowiredFooFormatter
.