2012-12-27 12 views
7

Obecnie mam projekt strony internetowej, dla której próbuję pisać testy integracji. W przypadku struktury projektu zdefiniowałem kody testowe pod numerem src/test/java, natomiast definicje komponentów bean sprężyny dla tych kodów pośredniczących znajdują się pod src/test/resources.Jak dołączyć klasy testowe i konfigurację podczas mojej wojny do testowania integracji przy użyciu programu maven?

To, co chciałbym zrobić, to to, że kiedy buduję swój artefakt wojenny, chciałbym, aby wszystkie klasy pośrednie zostały skompilowane i włączone do wojny wraz z plikami definicji ziaren sprężynowych. Próbowałem to zrobić za pomocą wtyczki maven war, ale jedyne rzeczy, które udało mi się skopiować to zasoby. Po prostu chciałbym użyć ścieżki klasy testowej i uwzględnić wszystkie te klasy w moim pliku wojny.

Wygląda na to, że opcja useTestClassPath z pluginem maven rozwiąże mój problem, ale obecny projekt, nad którym pracuję, używa obecnie Tomcat 6.0. Czy istnieje inny dodatek do wtyczki lub sposób, w jaki mogę skonfigurować wtyczkę maven war, aby osiągnąć mój cel?

+0

Czy należy przeprowadzić test integracji na wdrożonej aplikacji internetowej? – khmarbaise

+0

Mam systemy zewnętrzne, na których nie można polegać, aby były dostępne przez cały czas, więc usunąłem większość tych zależności. –

Odpowiedz

3

Możesz także zrobić to prosto. Spowoduje to dodanie obu klas testowych i zasobów testowych do WEB-INF/klas:

 <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.7</version> 
      <executions> 
       <execution> 
        <phase>process-test-classes</phase> 
        <configuration> 
         <target> 
          <copy todir="${basedir}/target/classes"> 
           <fileset dir="${basedir}/target/test-classes" includes="**/*" /> 
          </copy> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Polecam również umieścić ją w osobnym profilu jak „integracji”, a także, aby zastąpić nazwę pakietu w tym profilu nie być w stanie pomylić normalną wojnę bez testów i wojny testowej.

Pełny przykład z profilem to here. Możesz uruchomić mvn clean package, aby mieć wojnę war-it-test.war bez testów, lub możesz uruchomić mvn clean package -Pintegration, aby mieć wojnę z próbami zawartymi w wojnie war-it-test-integration.war.

+0

Dzięki, że zadziałało. –

+0

@ Rozwiązanie Ralpha też działa. Zaktualizowałem jego odpowiedź na przykładzie i umieściłem to samo w github. –

+0

Twoja modyfikacja mojej odpowiedzi została odrzucona przez moderatorów, ponieważ była niepoprawna. – Ralph

2

Możesz użyć maven build helper plugin, aby dodać dodatkowe foldery do "normalnej" ścieżki zajęć.

Ale polecam utworzyć nowy folder do testu integracji (na przykład src/it/java) i dodać ten folder, ale nie "normalny" folder testowy (src/test/java) - to samo dla folderu zasobów.

4

Wierzę, że poniższa konfiguracja wtyczki maven war zrobi to, co chcesz. Kopiujesz swoje klasy testowe do folderu WEB-INF/classes. Możesz nawet filtrować te zasoby.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>generate-test-war</id> 
      <phase>pre-integration-test</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <warSourceDirectory>${basedir}/src/test/webapp</warSourceDirectory> 
     <warName>${project.artifactId}-test</warName> 
     <webappDirectory>${basedir}/target/${project.artifactId}-test</webappDirectory> 
     <primaryArtifact>false</primaryArtifact> 
     <webResources> 
      <resource> 
       <directory>${basedir}/target/test-classes</directory> 
       <targetPath>WEB-INF/classes</targetPath> 
      </resource> 
     </webResources> 
    </configuration> 
</plugin> 

Zobacz http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html

0

Zamiast wtyczki Maven antrun, można zamiast tego użyć wtyczki zasobów Maven i skonfigurować go tak:

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.5</version> 
    <executions> 
     <execution> 
      <phase>process-test-classes</phase> 
      <id>test-classes</id> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <overwrite>false</overwrite> 
       <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory> 
       <resources> 
        <resource> 
         <directory>${project.build.directory}/test-classes</directory> 
        </resource> 
       </resources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
0

Korzystanie Tomcat 7 wtyczki z dodatkowych katalogów ścieżki klasy konfiguracja.

  <plugin> 
       <groupId>org.apache.tomcat.maven</groupId> 
       <artifactId>tomcat7-maven-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <additionalClasspathDirs> 
         <additionalClasspathDir>${build.testOutputDirectory}</additionalClasspathDir> 
        </additionalClasspathDirs> 
       </configuration> 
       <executions> 
        <execution> 
         <id>start-tomcat</id> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <fork>true</fork> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
Powiązane problemy