如何在src/test-integration/java文件夹中的maven中运行UnitTests

use*_*233 23 maven

当我们说mvn test时,通常的方式是maven会查找src/test/java文件夹中的测试.但是我在一些不同的文件夹中进行了测试,即src/integration-test/java.如何通过命令行运行此文件夹中的测试?

提前致谢,

马诺.

khm*_*ise 31

首先,您不应该通过测试 生命周期运行这些集成测试,因为存在 预集成测试,集成测试集成后测试生命周期阶段.除了集成测试之外,maven-failsafe-plugin负责.

有几种方法可以处理您的情况.首先,您应该遵循集成测试的命名约定

<includes>
 <include>**/IT*.java</include>
 <include>**/*IT.java</include>
 <include>**/*ITCase.java</include>
</includes>
Run Code Online (Sandbox Code Playgroud)

这意味着将集成测试放入默认文件夹src/test/java.如果你有一个多模块构建,那么最好只有一个包含集成测试的单独模块,或者你可以选择使用单独文件夹的路径(这不是最好的):

首先,您需要使用buildhelper-maven-plugin添加文件夹,以便像这样编译那些集成测试:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.9.1</version>
    <executions>
      <execution>
        <id>add-test-source</id>
        <phase>process-resources</phase>
        <goals>
          <goal>add-test-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>src/integration-test/java</source>
          </sources>
        </configuration>
      </execution>
    </executions>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

你必须像这样配置maven-failsafe-plugin:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.14.1</version>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
Run Code Online (Sandbox Code Playgroud)

配置完成后,您可以通过以下方式运行集成测试:

mvn verify
Run Code Online (Sandbox Code Playgroud)


FrV*_*aBe 16

@khmarbaise对他的建议是正确的(所以+1为此)但我想回答你的问题,而没有推测测试源位于其他地方的原因.

如果测试位于标准目录以外的其他目录中src/test/java,则最简单的解决方案是更改Super POM中testSourceDirectory定义的配置参数的默认值.

例如供src/foobar/java使用

<build>
  <testSourceDirectory>src/foobar/java</testSourceDirectory>
</build>
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地运行mvn test来执行测试.


更复杂的解决方案

如果您不想更改pom.xml配置,可以在命令行上指定testSourceDirectory参数,如下所示:

mvn -DtestSourceDirectory=src/foobar/java clean test
Run Code Online (Sandbox Code Playgroud)

但请确保您的源代码已编译完成.否则将无法找到并执行它们.在上面的示例中,测试源未放置在默认编译的位置,因此我们必须使用buildhelper插件更改pom并将目录添加到测试源列表中:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>add-test-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-test-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src/foobar/java</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

如果您不想更改pom中默认值的配置而不想在命令行传递新目录,则必须在maven-buildhelper-plugin中配置路径,并在pom中配置maven-surefire-plugin像这样的.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>add-test-source</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-test-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/foobar/java</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.14.1</version>
            <configuration>
                <testSourceDirectory>src/foobar/java</testSourceDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

现在,简单的用法mvn test将在非标准位置执行测试.