当前位置: 首页 > 知识库问答 >
问题:

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

祁建业
2023-03-14

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

我想做的是,当我构建我的war工件时,我希望所有的测试存根类都被编译并与Springbean定义文件一起包含在war中。我曾尝试使用maven war插件来实现这一点,但我唯一能够复制的就是资源。简单地说,我希望使用测试类路径,并将所有这些类包含在我的war文件中。

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

共有3个答案

权承
2023-03-14

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

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

翟嘉志
2023-03-14

我相信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

强硕
2023-03-14

你也可以直接做。这将向WEB-INF/类添加测试类和测试资源:

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

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

这里是配置文件的完整示例。您可以运行mvn clean package进行war测试。war不包括测试,或者您可以运行mvn clean package-Pintegration来进行war it测试集成。war,用于包含测试的战争。

 类似资料:
  • 下面是一个最小的例子: project/build.scala src/test/scala/helpers.scala 然后,在sbt中,“test”起作用: 但是“it:test”不能编译:

  • 集成测试是对已经进行单元测试的各个部分的一种整合测试。集成是昂贵的,并且它出现在测试中。你必须把这个考虑到你的预计和时间表里。 理想情况下,你应该这样组织一个项目,使得最后没有一个阶段是必须通过显式集成来进行的。这比在项目过程中,随着事情完成逐渐集成事情要好得多。如果这是不可避免的,请仔细评估。

  • 我有个关于Maven的问题。 我有文件名以*Test结尾的单元测试和文件名以*IT结尾的集成测试。 我的理解是,surefire将运行单元测试,故障保险将运行集成测试。 当我运行:mvn清洁安装 同时运行单元测试和集成测试。 当我跑步时: mvn验证 这两个测试也会运行。 我是否可以配置maven,以便在使用:mvn clean install时,只运行单元测试。当我使用mvn验证时,是否只运行集

  • 假设我有一个测试来断言系统中新用户的注册是否真的成功: 现在,这将在实际数据库中创建一个新的测试用户,因为我希望这个测试在实际环境中运行。这意味着测试不能一直运行,对吗?我应该如何进行此类测试?那些使用系统的实际环境并操纵真实数据的人?

  • 我有一个函数,在这个函数中,我想替换一些组件的行为(余弦,正弦,...),我正在尝试为这些部分创建一个mock,并将它们传递给函数。 问题是,我收到以下消息: *org.mockito.exceptions.misusing.MissingMethodInvocationException:当()需要一个必须是“模拟上的方法调用”的参数。例如:当(mock.getArticles()). then

  • 我正在使用Spring Boot(打包到没有SpringBoot运行程序的经典WAR),我想在Spock中实现集成测试。当我使用时,只使用标准Spring上下文(没有从Boot获得任何好处,例如。