8

我目前有一个 Maven Web 项目,我正在尝试为其编写集成测试。对于项目的结构,我在src/test/java下定义了测试存根,而这些存根的 spring bean 定义位于src/test/resources下。

我想要做的是,当我构建我的战争工件时,我希望所有的测试存根类都被编译并与 spring bean 定义文件一起包含在战争中。我尝试使用 maven 战争插件来做到这一点,但我唯一能够复制的是资源。简而言之,我想利用测试类路径并将所有这些类包含在我的 war 文件中。

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

4

7 回答 7

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>

我还建议您将其放入单独的配置文件中,例如“集成”,并覆盖该配置文件中的包名称,以免在没有打包测试和测试战争的情况下混淆正常战争。

profile 的完整示例在这里。您可能会在不包含测试的情况下进行mvn clean package战争war-it-test.war,或者您可能会在包含测试的情况下进行mvn clean package -Pintegration战争war-it-test-integration.war

于 2012-12-27T10:18:44.160 回答
4

我相信 Maven 战争插件的以下配置会做你想要的。您将您的测试类复制到您的 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

于 2013-01-10T18:24:18.603 回答
2

您可以使用maven build helper 插件将其他文件夹添加到“正常”类路径。

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

于 2012-12-27T10:09:40.750 回答
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>
于 2013-09-20T20:00:58.263 回答
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>
于 2014-10-02T03:28:27.103 回答
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>
于 2019-03-13T06:09:32.237 回答
0

我们需要将以下插件添加到 pom.xml 以便将测试用例添加到 jar 中。感谢@IvonSopov

            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <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>

但是在添加这一行之后,我们构建成功并且还能够将测试用例类添加到 jar 中。但问题出在 pom.xml 中,它显示为错误

生命周期配置未涵盖插件执行:org.apache.maven.plugins:maven-antrun-plugin:1.8:run (execution:default, phase: process-test-classes)

为了消除此错误,我们需要将以下插件作为单独的标签包含在构建标签中。(不在我们之前添加的插件中。)

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

现在我们可以创建包含测试类的 jar,而不会出现任何错误。

于 2019-03-13T06:32:18.387 回答