Autowiring funktioniert nicht in Spring 3.1.2, JUnit 4.10.0

8

Spring 3.1.2, JUnit 4.10.0, und ziemlich neu in beiden Versionen. Ich habe das Problem, dass ich die Annotation-basierte Autowinding nicht funktionieren kann.

Im Folgenden sind zwei Beispiele aufgeführt, von denen der eine keine Anmerkungen verwendet. Und der zweite mit Annotation, die nicht funktioniert, und ich finde den Grund nicht. Ich habe die Proben von spring-mvc-test ziemlich genau verfolgt.

Arbeiten :

%Vor%

Failing , weil userManagementService null ist und nicht autowired wird:

%Vor%

Beachten Sie, dass beide oben genannten Testklassen die gleiche Kontextkonfiguration verwenden sollten und der userManagementService dort definiert ist.

ApiTests-context.xml:

%Vor%

und der UserManagementService (Schnittstelle) sowie UserManagementServiceImpl haben die Annotation @Service .

Zwei kleinere Fragen / Beobachtungen: setup () wird nie aufgerufen, obwohl es die Annotation @Before hat. Außerdem habe ich bemerkt, dass meine Testmethoden nicht ausgeführt / erkannt werden, wenn sie nicht mit dem Namen 'test' beginnen, was bei allen Spring-mvc-Testproben, die ich gesehen habe, nicht der Fall ist.

pom.xml:

%Vor%

Aktualisierung:

Das Problem tritt nur auf, wenn ich die Tests von Maven aus führe; Es ist in Ordnung, wenn ich den Test von meiner IDE (IntelliJ IDEA) aus starte.

%Vor%     
Mathias Conradt 21.09.2012, 11:30
quelle

3 Antworten

6

Das Autowiren wird nicht ausgeführt, es sei denn, Sie führen einen Komponentenscan durch.

Warum haben Sie es in Ihrem Code kommentiert?

%Vor%

Auch re: junit. Wenn Sie in Eclipse sind, können Sie einfach in die Abhängigkeitsstruktur des Pom gehen und auf Junit filtern. Überprüfen Sie, ob Sie tatsächlich diese Version verwenden und keinen älteren Junit einbinden.

Bearbeiten: Ok, ich habe gerade Ihre Konfiguration überprüft und konnte es auf dieser Seite arbeiten. Meine einzige Vermutung kann sein, dass Sie es irgendwie mit einem schlechten Testläufer laufen lassen, der es verursacht, das falsche junit zu benutzen.

Edit 2 (SOLVED) : Es stellt sich also heraus, dass das Problem darin liegt, dass Sie eine benutzerdefinierte Version von junit verwenden. Surefire sucht nach der bereitgestellten Junit-Bibliothek und kann sie nicht finden. Als Ergebnis wird standardmäßig junit 3 verwendet, was dazu führt, dass Ihre App das Laden der Konfiguration überspringt.

Sie können den benutzerdefinierten Anbieter explizit wie

angeben %Vor%

Aber ich habe festgestellt, dass es mit benutzerdefinierten Repos nicht gut funktioniert. Wenn möglich, würde ich vorschlagen, die Standardversion von junit zu verwenden.

    
MikePatel 21.09.2012, 12:46
quelle
0

Versuchen Sie eine spezifische Kontextkonfiguration, z. B.

%Vor%

(zeigt nur, wie dies bei Bedarf mit mehreren Dateien verwendet werden kann - einer kann ausreichen)

Edit: Haben Sie AutowiredAnnotationBeanPostProcessor wie hier erwähnt aktiviert? Ссылка

    
Brian 21.09.2012 11:37
quelle
0

Ich hatte das gleiche Problem. Mein @Autowire würde in meiner IDE (SpringSource STS) funktionieren, aber den Anwendungskontext nicht laden, wenn ich Maven zum Erstellen über die Befehlszeile verwendete.

Das Problem war mit meinen Abhängigkeiten in der pom.xml. Ich habe die Spring-Version von JUnit verwendet, die den Fehler verursacht hat. Ich denke, das ist die Ursache des ursprünglichen Posts. Ich musste kein Maven Plug-in codieren, damit es funktioniert.

Ich habe mich geändert

%Vor%

bis

%Vor%     
bMcNees 12.03.2013 20:37
quelle