如何在使用maven进行集成测试的战争中包含测试类和配置?

时间:2012-12-27 09:56:25

标签: spring tomcat maven integration-testing stub

我目前有一个maven web项目,我正在尝试编写集成测试。对于项目的结构,我在 src / test / java 下定义了测试存根,而这些存根的s​​pring bean定义位于 src / test / resources 下。

我想做的是,当我构建我的war工件时,我希望所有的测试存根类都可以编译并包含在war中以及spring bean定义文件中。我试图用maven war插件做到这一点,但我能够复制的唯一东西就是资源。 简单地说,我想使用测试类路径并在war文件中包含所有这些类。

似乎带有maven jetty插件的useTestClassPath选项可以解决我的问题,但我正在处理的当前项目目前正在使用Tomcat 6.0。是否有另一个maven插件或我可以配置maven war插件来实现我的目标?

6 个答案:

答案 0 :(得分:4)

你也可以直接做到。这将把测试类和测试资源添加到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

答案 1 :(得分: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

答案 2 :(得分:2)

您可以使用maven build helper plugin将其他文件夹添加到“普通”类路径。

但我建议为集成测试创建一个新文件夹(例如src / it / java),并添加此文件夹,但不要添加“普通”测试文件夹(src / test / java) - 相同对于资源文件夹。

答案 3 :(得分:0)

您可以改为使用maven资源插件而不是使用maven antrun插件,并将其配置为:

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

答案 4 :(得分: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>

答案 5 :(得分:0)

您可以在pom.xml文件中进行此配置,而在pom.xml中没有任何错误,并且可以将测试类添加到我们的jar或war文件中。

    <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.eclipse.m2e</groupId>
                        <artifactId>lifecycle-mapping</artifactId>
                        <version>1.0.0</version>
                        <configuration>
                            <lifecycleMappingMetadata>
                                <pluginExecutions>
                                    <pluginExecution>
                                        <pluginExecutionFilter>
                                            <groupId>org.apache.maven.plugins</groupId>
                                            <artifactId>maven-antrun-plugin</artifactId>
                                            <versionRange>[1.7,)</versionRange>
                                            <goals>
                                                <goal>run</goal>
                                            </goals>
                                        </pluginExecutionFilter>
                                        <action>
                                            <execute />
                                        </action>
                                    </pluginExecution>
                                </pluginExecutions>
                            </lifecycleMappingMetadata>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>


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