防止单元测试,但允许在 Maven 中进行集成测试

我有一个 Maven 版本,其中使用了 SureFire 插件来运行一些单元测试,使用 FailSafe 插件来运行一些集成测试。我想要一种方法来运行只是故障安全插件的测试。

对于我来说,添加不同的概要文件或任何内容都不是一个好的解决方案,因为它是一个多模块构建,我不想编辑每个模块的 pom。

有停止 所有测试的 skip.testsmaven.test.skipskipTests,以及只停止故障安全插件的 skipITs

那么,Maven 是否有一个类似 skipITs的命令行标志,而不是使用“ only ITs”的功能?

72785 次浏览

一个变通方案是:

mvn clean test-compile failsafe:integration-test

无可否认,这很丑陋,但它可能解决你的问题。


或者(另一种黑客行为) :

mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false

参考文献:

尝试在一个单独的概要文件中运行集成或单元测试。

我发现只跳过 surefire 测试的最简单方法是配置 surefire (但不是保险措施) ,如下所示:

<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14</version>
<configuration>
<!-- skips surefire tests without skipping failsafe tests.
Property value seems to magically default to false -->
<skipTests>${skip.surefire.tests}</skipTests>
</configuration>
</plugin>

这允许你运行 mvn verify -Dskip.surefire.tests,并且只能确保跳过测试,而不是故障安全测试; 它还将运行所有其他必要的阶段,包括前集成和后集成,并且还将运行 verify目标,如果你的集成测试失败,实际上需要 失败了

请注意,这重新定义了用于指定应该跳过测试的属性,因此如果您提供了规范的 -DskipTests=true,surefire 将忽略它,但故障安全将尊重它,这可能是意想不到的,特别是如果您已经有指定该标志的现有构建/用户。一个简单的解决方案似乎是将 skip.surefire.tests的值默认为 pom 的 <properties>部分中的 skipTests:

<properties>
<skip.surefire.tests>${skipTests}</skip.surefire.tests>
</properties>

如果需要,可以为故障安全提供一个名为 skip.failsafe.tests的模拟参数,但是我认为没有必要——因为单元测试通常运行在早期阶段,如果我想运行单元测试而不是集成测试,我会运行 test阶段而不是 verify阶段。你的经历可能会有所不同!

这些 skip.(surefire|failsafe).tests属性可能应该集成到 surefire/faulsafe 代码本身中,但我不确定它会在多大程度上违反“它们是完全相同的插件,除了一个微小的差异”的精神。

希望这个能帮上忙!

尝试只运行测试与故障安全(插件为集成-测试-它将允许你只运行集成测试与这种命名,默认情况下: * 资讯科技.java,* */IT. java,* /* ITCase.java; ,但是您可以很容易地从 pom 文件中更改它)

mvn failsafe:integration-test

如果只想使用 SureFire (用于单元测试的插件)

mvn surefire:test

或者一次只做一个测试:

mvn -Dtest=MyUnitlTest

我喜欢这样,所以每个阶段都能正常执行:

 mvn -Dtest=foo -DfailIfNoTests=false verify

我使用的代码从 Antonio Goncalves 博客,这是完美的工作。

您可以使用以下属性:

-DskipUTs=true跳过万无一失的测试。

跳过故障安全测试的 -DskipITs=true

跳过所有测试的 -DskipTests=true

pom.xml如下:

<properties>
<skipTests>false</skipTests>
<skipITs>${skipTests}</skipITs>
<skipUTs>${skipTests}</skipUTs>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>${skipUTs}</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<id>run-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<skipTests>${skipTests}</skipTests>
<skipITs>${skipITs}</skipITs>
</configuration>
</plugin>
</plugins>
</build>

这跳过了由 SureFire触发的 UnitTests,只测试一个测试:

mvn failsafe:integration-test -Dit.test=YourTestName

您还可以提供一个模式: mvn failsafe:integration-test -Dit.test=*

(美芬3.6.3)