2016-03-22 13 views
1

Ich habe ein Spring-Projekt mit 4 typischen Quellordner - main/src, main/resources, test/src und test/resources. Wenn ich meine Anwendung ausführe, ruft Spring die Anwendungskontextdatei in main/resources ab und wenn ich einen beliebigen Junit-Test ausführe, ruft es die application-context.xml-Datei unter test/resources ab. Wie holt Spring die application-context.xml Datei passend oder ist irgendeine Config beteiligt?Spring Application Context - Haupt-und Test-Ordner

Antwort

1

Versuchen Sie, ein anderes Projekt mit jsf oder mit Struts auszuführen, sie werden auch Ressourcen aus den entsprechenden Ordnern auswählen. Es hat nichts mit dem Frühling zu tun. Es wird von Maven oder einem anderen Build-System, das Sie verwenden, sorgfältig behandelt.

main/src , main/resources , test/src , test/resources 

Diese Ordner sind Standard, wenn Sie Maven oder Gradle-Projekt erstellen.

+0

Ich betreibe keinen Maven Build, sondern laufe den Junit von Eclipse. Kümmert sich Maven hinter den Kulissen? Dies war eine bereits existierende Anwendung und wollte daher überprüfen, ob ich irgendeine Konfiguration durchführen muss, um dieses Verhalten zu erreichen, wenn ich ein neues Projekt erstelle. –

+0

@PunterVicky Wenn Sie Ihren 'junit' ausführen, wird Ihre' junit' Bibliothek immer nach den Ressourcen im Testordner suchen, denn wenn Sie Ihren Test als 'Run as-> Junit' ausführen, benutzt Ihre ID junit aus dem Klassenpfad um Ihren zu starten Prüfung. und "Junit" wird Ressourcen von Test-Ordnern auswählen – Pragnani

+0

Danke Pragnani !! –

1

Die Anwendung teilt Spring mit, wo der Anwendungskontext ist. Web-Anwendungen tun dies, indem sie einen ContextLoaderListener in der web.xml konfigurieren. Für jeden Test, wie Ihr Anwendungskontext geladen wird, ist ein Teil der Testkonfiguration, die Annotation @ContextConfiguration gibt an, wie der Kontext von welchem ​​Ort oder von welchen annotierten Klassen geladen wird.

Zum Beispiel, wenn ich den Test

@ContextConfiguration(loader = AnnotationConfigContextLoader.class, 
classes = MyTest.ContextConfiguration.class) 
public class MyTest { 
    @Autowired MyStuff stuff; 

    static class ContextConfiguration { 
     @Bean public MyStuff getMyStuff() { 
      return new MyStuff(); 
     } 
    } 
} 

verwendet dann MyTest die Anmerkungen im Test zu verwenden, einrichten, um zu entscheiden, was in zu injizieren, und füllt die Felder der angegebene ContextConfiguration verwenden. Es ignoriert vollständig jede XML-Konfiguration im Klassenpfad.

Der Kontextlader kann auch Speicherorte angeben, aus denen der Kontext geladen werden soll, siehe Dokumentation für org.springframework.test.context.ContextLoader.

Sie sagen nicht, welche Version von Spring Sie verwenden. Vor 3.0 Tests verwaltete Testkontexte durch Implementieren der abstrakten Methode loadContext der Klasse org.springframework.test.AbstractSpringContextTests, die Teil der Hierarchie war, die Spring-aware-Tests erweiterten.

+0

Ich denke, es ging darum, wie junit die passenden Ressourcen auswählt, zB wenn man eine Ressource in den Testresourcen-Ordner und in den src-Ressourcenordner legt. Ja, wir werden den Klassenpfad der Konfigurationsdatei angeben, aber wie findet es den Test statt der Quelle? – Pragnani

+0

Und versuchen Sie auch, ein Stand-alone-Maven-Projekt ohne Federrahmenarbeit zu nehmen. Und nimm eine Ressource in beide Testressourcen und src-Ressourcen auf, gib junit in dein cp ein und schreibe eine Testklasse, die diese Ressource verwendet und test, um zu sehen, welche Ressource junit wählt – Pragnani

+0

@Pragnini: die spezifische Frage war, wie der Test welche Anwendung auswählt Kontext zu verwenden. Der Frühling überlässt es nicht dem, was auf dem Klassenpfad von maven oder der IDE steht. –

Verwandte Themen