2010-12-14 16 views
0

Ich brauche Ressource Ziel des Ressourcen-Plugins für Testphase anders eingerichtet werden, als für Build-Phase. Beim Testen muss ich die Sachen von src/main/resources ausschließen. Es scheint, es nicht getan werden kann, testResources Ziel ist es irrelevant für das, was ich brauche und Ressourcen Ziel kann nur ein Einstellung in pom Definition hat, die Wirkung in beiden Tests dauert und Phase bauen ...Einrichten von Maven Ressourcen beim Testen

Zum Beispiel , würde ich folgende Einstellungen müssen anders aussehen (einige umfasst nicht) in der Testphase:

  <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/java</directory> 
       <includes> 
        <include>**/*.java</include> 
        <include>service.properties</include> 
       </includes> 
      </resource> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
       <includes> 
        <include>**/*.xml</include> 
        <include>**/*.properties</include> 
       </includes> 
      </resource> 
      </resources> 

Das ideale Verhalten wäre, wenn ich „src/main/*“ in <testResources> aber es kann leider definieren könnte‘ t gemacht werden jetzt

Bitte helfen, ich würde Tonnen von Code-Änderung tun müssen, wenn ich es nicht herausgefunden habe.

Antwort

0

Sie müssten wahrscheinlich die Ressourcen als separates Projekt haben, das zur Testzeit nicht enthalten ist, was ein Chaos ist.

Ich kann mir vorstellen, warum Sie das tun würden, aber Sie testen das Artefakt zu diesem Zeitpunkt nicht wirklich.

Hier leuchtet IoC wirklich. Ihre Komponenten erhalten ihre Ressourcen injiziert, anstatt dass die Komponente einen Laufzeitauswahlcode der Ressource (Test oder aktuell) haben muss, die ausgewählt werden soll. Dies ist wichtig, da der Testcode den Code, der den Test auswählt, nicht testen kann. Wenn Sie sehen, was ich meine :-)

Wenn Sie Spring verwenden, können Sie eine test-context.xml mit Bean-Überschreibungen für die Änderungen erstellen, die Sie vornehmen möchten, und laden Sie diese nach dem Laden aller anderen Kontexte. Wenn es geladen wird, erhalten Sie eine Warnung, dass die Beans überschrieben werden. Schauen Sie sie beim ersten Mal genau an, um sicher zu gehen, dass die Test-Bean die Produktionsbohne überschreibt. Dann sollte diese Bohne wie erwartet injiziert werden.

+0

Der Grund, warum ich es tun möchte, ist eigentlich auf 2 Frühjahr Kontexte (app/test) - Spring Bean Definitionen, die gleichen Namen in Klassen und Test-Klassen haben. Anstatt Code zu ändern, würde ich lieber tun so etwas wie ... Sonst gibt es Namenskonflikte – lisak

+0

Ich habe das oben für das, was im Frühling passiert, bearbeitet. Dies ist ein sehr häufiger Fall und erfordert keine Änderung der Kompilierung oder das Generieren mehrerer Artefakte. Lassen Sie mich wissen, wenn Sie weitere Fragen haben und ich kann mehr aktualisieren. –

+0

Hey Brian, danke, aber es ist viel zu kompliziert. Es gibt 700 Beans auf Projekt Classpath, Hunderte von Beans in einer seiner Abhängigkeiten + Testing Context von diesen Beans ... Override Beans ist absolut nicht genug, ich brauche wirklich eine Antwort für diese Frage, keine Umgehung – lisak