Maven Failsafe插件总是跳过集成测试

时间:2015-03-04 21:05:12

标签: java maven automated-tests integration-testing

我正在尝试配置我的Maven项目以进行单元测试和集成测试。单元测试使用Maven Surefire插件已经正常工作,并根据模式*Test.java命名。

添加Failsafe插件后,如下所示:

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.18.1</version>
            <dependencies>
              <dependency>
                <groupId>org.apache.maven.surefire</groupId>
                <artifactId>surefire-junit47</artifactId>
                <version>2.18.1</version>
              </dependency>
            </dependencies>
            <configuration>
                <includes>
                    <include>**/*IT.java</include>
                </includes>
            </configuration>
            <executions>
              <execution>
                <id>integration-test</id>
                <goals>
                  <goal>integration-test</goal>
                </goals>
              </execution>
            </executions>
          </plugin>

我添加了一个名为SomeTestIT.java的集成测试。但是,当我跑:

mvn failsafe:integration-test

我得到以下内容:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building MyApp 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-failsafe-plugin:2.18.1:integration-test (default-cli) @ MyApp ---
[INFO] Tests are skipped.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.368 s
[INFO] Finished at: 2015-03-04T14:43:50-06:00
[INFO] Final Memory: 11M/219M
[INFO] ------------------------------------------------------------------------

我的测试类(隐藏在测试层次结构深处的几个包级别)看起来像:

package com.example.my.package;

import org.junit.Test;
import org.junit.Assert;
import com.example.my.package.SomeService;

import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.beans.factory.annotation.Autowired;

@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTestIT
{
    @Autowired
    private SomeService target;

    @Test
    public void testTest()
    {
        Assert.assertTrue(false);
    }

    @Test
    public void basicListTest()
    {
        Assert.assertNotNull(target);
    }
}

测试是存根的,以确保我有Maven集成工作。

我确保:

  • 我的POM包含对JUnit的直接测试范围依赖。
  • 我已尝试使用和不使用显式测试运行依赖项的插件配置。
  • 我已经尝试了上面的配置,无论是否有明确的包含模式(假设我的类应该被默认值选中)。

尽管如此,测试从未实际运行过。还有其他必要来运行集成测试吗?

3 个答案:

答案 0 :(得分:12)

我终于弄清楚发生了什么,并希望让其他人像我一样转动他们的车轮。在POM头部的<properties>标记中,有人添加了一个读取<skipITs>true</skipITs>的属性。以前没有集成测试,所以属性没用。它可能是从其他POM中剔除的,没有真正考虑它是什么或它做什么。

答案 1 :(得分:4)

我的问题是maven故障安全插件已经在某些父pom中定义并且配置奇怪。

总的来说,我发现处理这类问题的最好方法是首先看一下有效的pom:

mvn help:effective-pom

并检查(1)所有属性(2)有问题插件的配置

答案 2 :(得分:2)

IntelliJ 用户应该确保检查他们的设置!

如下图所示,在

中有一个选项
Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Runner

如果选中,Maven 将跳过故障安全插件中的集成测试!它似乎与其他答案之一中的 skipITs 具有类似的效果。但是,因为 IntelliJ 将它作为参数传递给它的 Maven 命令,它当然不会出现在有效的 POM 中(也在不同的答案中提到)。

the skip tests option