如何让我的Maven的集成测试运行(How do I get my Maven Integratio

2019-07-17 11:30发布

我有一个maven2的多模块项目,并在我的每个子模块我有一个名为JUnit测试Test.javaIntegration.java分别为单元测试和集成测试。 当我执行:

mvn test

所有的JUnit测试的*Test.java子模块中被执行。 当我执行

mvn test -Dtest=**/*Integration

没有任何的Integration.java测试子模块内得到执行。

这些看似相同的指令给我,但一个与-Dtest = / * **的集成不工作会显示在父级别中运行0测试,没有任何试验

Answer 1:

您可以设置Maven的神火单独运行单元测试和集成测试。 在标准单元测试阶段运行的一切不匹配模式的集成测试。 然后,您创建运行只是集成测试第二个测试阶段

下面是一个例子:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <excludes>
          <exclude>**/*IntegrationTest.java</exclude>
        </excludes>
      </configuration>
      <executions>
        <execution>
          <id>integration-test</id>
          <goals>
            <goal>test</goal>
          </goals>
          <phase>integration-test</phase>
          <configuration>
            <excludes>
              <exclude>none</exclude>
            </excludes>
            <includes>
              <include>**/*IntegrationTest.java</include>
            </includes>
          </configuration>
        </execution>
      </executions>
    </plugin>


Answer 2:

的Maven构建的生命周期现在包括“集成测试”相对于运行集成测试,这是从在“测试”阶段运行单元测试单独运行。 据“包”后运行,所以如果你运行“MVN验证”,“MVN安装”,或“MVN部署”,集成测试将沿途运行。

默认情况下,集成测试运行名为test类**/IT*.java**/*IT.java ,和**/*ITCase.java ,但这是可以配置的。

有关如何连接这一切了,看细节故障安全插件 ,在保证安全使用的页面 (不正确地从以前的友情链接,我写这篇文章),并检查了这Sonatype的博客文章 。



Answer 3:

我有整整做你想要做什么,它的伟大工程。 单元测试“*测试”始终运行,而“* IntegrationTests”只有当你做一个MVN验证或MVN安装运行。 这从我的POM片段。 serg10几乎拥有了正确的....但并不完全。

  <plugin>
    <!-- Separates the unit tests from the integration tests. -->
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
       <!-- Skip the default running of this plug-in (or everything is run twice...see below) -->
       <skip>true</skip>
       <!-- Show 100% of the lines from the stack trace (doesn't work) -->
       <trimStackTrace>false</trimStackTrace>
    </configuration>
    <executions>
       <execution>
          <id>unit-tests</id>
          <phase>test</phase>
          <goals>
             <goal>test</goal>
          </goals>
          <configuration>
                <!-- Never skip running the tests when the test phase is invoked -->
                <skip>false</skip>
             <includes>
                   <!-- Include unit tests within integration-test phase. -->
                <include>**/*Tests.java</include>
             </includes>
             <excludes>
               <!-- Exclude integration tests within (unit) test phase. -->
                <exclude>**/*IntegrationTests.java</exclude>
            </excludes>
          </configuration>
       </execution>
       <execution>
          <id>integration-tests</id>
          <phase>integration-test</phase>
          <goals>
             <goal>test</goal>
          </goals>
          <configuration>
            <!-- Never skip running the tests when the integration-test phase is invoked -->
             <skip>false</skip>
             <includes>
               <!-- Include integration tests within integration-test phase. -->
               <include>**/*IntegrationTests.java</include>
             </includes>
          </configuration>
       </execution>
    </executions>
  </plugin>

祝好运!



Answer 4:

您可以使用JUnit类和Maven很容易将它们分割。
这是非常,非常简要地低于划分单元测试和集成测试中。

定义一个标记接口

在分组使用类别的测试的第一步是建立一个标记接口。
此接口将被用来标记所有要运行的集成测试的测试。

public interface IntegrationTest {}

标记您的测试类

类别注释添加到您的测试类的顶部。 它需要你的新接口的名称。

import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
 }
}

配置Maven单元测试

该解决方案的优点在于没有真正改变对事物的单元测试的一面。
我们只是增加一些配置,以行家万无一失插件,使其忽略任何集成测试。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.11</version>
    <configuration>
        <includes>
            <include>**/*.class</include>
        </includes>
        <excludedGroups>
            com.test.annotation.type.IntegrationTest
        </excludedGroups>
    </configuration>
</plugin>

当你做一个干净的MVN测试只有你没有标记的单元测试运行。

配置Maven集成测试

再次为这个配置非常简单。
我们使用标准的故障安全插件并将其配置为仅运行集成测试。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
        <includes>
            <include>**/*.class</include>
        </includes>
        <groups>
            com.test.annotation.type.IntegrationTest
        </groups>
    </configuration>
</plugin>

该配置采用了标准的执行目标,在构建的集成测试阶段运行故障安全插件。

现在,你可以做一个干净的MVN安装
这一次,以及运行单元测试,集成测试是在集成测试阶段运行。



Answer 5:

你应该尝试使用Maven的故障安全插件 。 你可以告诉它包括一组特定的测试。



Answer 6:

默认情况下,Maven的只运行在类名有测试的地方测试。

重命名为IntegrationTest,它可能会工作。

或者你可以改变Maven的配置,以包括文件,但它可能更容易,更好仅举你的测试SomethingTest。

从夹杂物和测试排除 :

默认情况下,一定能成功的插件会自动包括与以下通配符模式的所有测试类:

  • “** /测试*的.java” - 包括所有的子目录,并以“测试”开始所有的Java文件名。
  • “** / * Test.java” - 包括所有的子目录,并以“测试”结束所有的java文件名。
  • “** / * TestCase.java” - 包括所有的子目录,并以“TestCase的”最终所有的Java文件名。

如果测试类不符合命名约定去,然后配置神火插件,并指定要包括的测试。



Answer 7:

与Maven运行集成测试的另一种方法是利用配置文件功能的:

...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <includes>
                    <include>**/*Test.java</include>
                </includes>
                <excludes>
                    <exclude>**/*IntegrationTest.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>integration-tests</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <includes>
                            <include>**/*IntegrationTest.java</include>
                        </includes>
                        <excludes>
                            <exclude>**/*StagingIntegrationTest.java</exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
...

运行“MVN全新安装”将运行默认的构建。 正如上面集成测试规定将被忽略。 运行“MVN清洁安装-P集成,测试”将包括集成测试(我也忽略了我的分期集成测试)。 另外,我有一个运行我的集成测试,每天晚上CI服务器和我发出命令“MVN测试-P集成的测试”。



Answer 8:

您可以按照行家文件运行单元测试的构建与运行分开的集成测试。

<project>
    <properties>
        <skipTests>true</skipTests>
    </properties>
    [...]
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.20.1</version>
                <configuration>
                    <skipITs>${skipTests}</skipITs>
                </configuration>
            </plugin>
        </plugins>
    </build>
    [...]
</project>

这将允许您使用默认情况下禁用所有集成测试运行。 为了运行它们,你使用这个命令:

mvn install -DskipTests=false


文章来源: How do I get my Maven Integration tests to run