2012-12-27 48 views
7

我目前有一個maven web項目,我正在嘗試編寫集成測試。對於該項目的結構,我已經定義了測試存根,根據src/test/java,而這些存根的s​​pring bean定義位於src/test/resources如何在我的戰爭中使用maven集成測試中包含測試類和配置?

我想做的事情是,當我構建我的戰爭工件時,我希望所有的測試存根類都被編譯幷包含在戰爭中以及Spring bean定義文件中。我試圖用maven war插件來做,但我唯一能夠複製的是資源。 簡而言之,我想利用測試類路徑並將所有這些類包含在我的war文件中。

似乎與maven碼頭插件useTestClassPath選項將解決我的問題,但目前我正在使用的項目正在使用Tomcat 6.0。有沒有另外一個maven插件或者我可以配置maven war插件來實現我的目標的方法?

+0

這些集成測試應該針對部署的Web應用程序運行嗎? – khmarbaise

+0

我有不能依賴的外部系統始終可用,所以我已將這些依賴關係中的大部分依存於其中。 –

回答

3

你也可以直接做。這兩個測試類和測試資源添加到WEB-INF/classes中:

 <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> 

我還建議你把它變成像「一體化」單獨的配置文件,並在該配置文件覆蓋包名不能夠在沒有測試打包和測試戰的情況下混淆正常的戰爭。

配置文件的完整示例是here。您可以運行mvn clean package進行戰爭war-it-test.war而不包含測試,或者您可以運行mvn clean package -Pintegration針對包含測試的戰爭進行戰爭war-it-test-integration.war

+0

謝謝你的工作。 –

+0

@ Ralph的解決方案也可以工作。我已經用這個例子更新了他的答案,並且在github中也把它放在了同一個要點上。 –

+0

您修改我的答案被版主拒絕,因爲它不正確。 – Ralph

2

您可以使用maven build helper plugin將其他文件夾添加到「普通」類路徑。

但我建議爲您的集成測試(例如src/it/java)創建一個新文件夾,並添加此文件夾,但不是「正常」測試文件夾(src/test/java) - 相同的資源文件夾。

4

我相信maven war插件的下列配置會做你想做的。您將測試類複製到您的WEB-INF/classes文件夾中。你甚至可以過濾這些資源。

<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> 

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

0

而不是使用maven的antrun插件,你也可以使用Maven的資源插件和配置它是這樣的:

<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

使用Tomcat 7的插件額外的類路徑目錄組態。

  <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> 
相關問題