Maven Failsafe 插件总是跳过集成测试
Maven Failsafe Plugin is always skipping integration tests
我正在尝试配置我的 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] ------------------------------------------------------------------------
我的测试 class(在测试层次结构下深埋了几个包级别)看起来像:
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 的直接、测试范围的依赖。
- 我已经尝试过带和不带显式测试的插件配置 运行ner 依赖性。
- 我已经尝试了上面的配置,有和没有显式包含模式(假设我的 class 应该被默认设置)。
尽管如此,测试从未真正 运行。是否还有其他必要的集成测试 运行ning?
我终于明白是怎么回事了,想阻止其他人像我一样转动轮子。在 POM 头部的 <properties>
标签中,有人添加了一个 属性,读作 <skipITs>true</skipITs>
。之前没有集成测试,所以 属性 没用。它可能是从其他 POM 中提取出来的,而没有真正考虑它是什么或它做了什么。
我的问题是 maven failsafe 插件已经在一些父 pom 中定义并且配置很奇怪。
一般来说,我发现处理此类问题的最佳方法是首先查看有效的 pom:
mvn help:effective-pom
并检查 (1) 所有属性 (2) 有问题插件的配置
IntelliJ 用户一定要检查他们的设置!
如下截图所示,
中有一个选项
Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Runner
如果选中,Maven 将跳过故障安全插件中的集成测试!它似乎与其他答案之一中的 skipITs
具有相似的效果。然而,因为 IntelliJ 将它作为参数传递给它的 Maven 命令,它当然不会出现在有效的 POM 中(也在不同的答案中提到)。
我正在尝试配置我的 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] ------------------------------------------------------------------------
我的测试 class(在测试层次结构下深埋了几个包级别)看起来像:
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 的直接、测试范围的依赖。
- 我已经尝试过带和不带显式测试的插件配置 运行ner 依赖性。
- 我已经尝试了上面的配置,有和没有显式包含模式(假设我的 class 应该被默认设置)。
尽管如此,测试从未真正 运行。是否还有其他必要的集成测试 运行ning?
我终于明白是怎么回事了,想阻止其他人像我一样转动轮子。在 POM 头部的 <properties>
标签中,有人添加了一个 属性,读作 <skipITs>true</skipITs>
。之前没有集成测试,所以 属性 没用。它可能是从其他 POM 中提取出来的,而没有真正考虑它是什么或它做了什么。
我的问题是 maven failsafe 插件已经在一些父 pom 中定义并且配置很奇怪。
一般来说,我发现处理此类问题的最佳方法是首先查看有效的 pom:
mvn help:effective-pom
并检查 (1) 所有属性 (2) 有问题插件的配置
IntelliJ 用户一定要检查他们的设置!
如下截图所示,
中有一个选项Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Runner
如果选中,Maven 将跳过故障安全插件中的集成测试!它似乎与其他答案之一中的 skipITs
具有相似的效果。然而,因为 IntelliJ 将它作为参数传递给它的 Maven 命令,它当然不会出现在有效的 POM 中(也在不同的答案中提到)。