Mat*_*ard 138 integration-testing build maven maven-surefire-plugin maven-failsafe-plugin
我有一个Maven构建,我使用SureFire插件来运行一些单元测试,而FailSafe插件则运行一些集成测试.我想要一种方法来运行FailSafe插件的测试.
对于我来说,在pom中添加不同的配置文件或任何东西并不是一个好的解决方案,因为它是一个多模块构建,我不想编辑每个模块的pom.
有skip.tests和maven.test.skip和skipTests它停止所有的测试,以及skipITs,其仅停止故障安全插件.
那么,Maven是否有一个命令行标志skipITs,而是具有"onlyITs"的功能?
bac*_*car 152
我发现只跳过surefire测试的最简单方法是配置surefire(但不是failafe),如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
这允许你运行mvn verify -Dskip.surefire.tests,只有万无一失,而不是故障保险,测试将被跳过; 它还将运行所有其他必要的阶段,包括预集成和后集成,并且还将运行在集成测试失败时verify实际失败maven构建所需的目标.
请注意,这会重新定义用于指定应跳过测试的属性,因此如果您提供规范-DskipTests=true,则surefire将忽略它,但failsafe会尊重它,这可能是意外的,特别是如果您已经有指定该标志的现有构建/用户.一个简单的解决方法似乎是默认skip.surefire.tests为skipTests你<properties>的pom部分的值:
<properties>
<skip.surefire.tests>${skipTests}</skip.surefire.tests>
</properties>
Run Code Online (Sandbox Code Playgroud)
如果你需要,你可以提供一个名为failafe的类似参数skip.failsafe.tests,但是我没有发现它是必要的 - 因为单元测试通常在早期阶段运行,如果我想运行单元测试而不是集成测试,我会运行的test阶段,而不是verify阶段.您的经历会有所不同!
这些skip.(surefire|failsafe).tests属性应该可以集成到surefire/failsafe代码本身,但我不确定它会违反多少"它们是完全相同的插件,除了1个小差异"的精神.
Sea*_*oyd 113
解决方法是致电:
mvn clean test-compile failsafe:integration-test
Run Code Online (Sandbox Code Playgroud)
不可否认,这很难看,但它可以解决你的问题.
或(另一个黑客):
mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false
Run Code Online (Sandbox Code Playgroud)
参考:
Mar*_*ger 56
我正在使用Antonio Goncalves博客的代码,它完美无缺.
您可以使用以下属性:
-DskipUTs=true 跳过surefire测试.
-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>
Run Code Online (Sandbox Code Playgroud)
小智 21
希望这可以帮助!
尝试仅使用FailSafe运行测试(用于集成测试的插件 - 它将允许您仅使用此类命名运行集成测试,默认情况下:*/ IT .java,**/IT.java,* /*ITCase.java ;,但您可以轻松地从pom文件更改它)
mvn failsafe:integration-test
Run Code Online (Sandbox Code Playgroud)
当你只想使用SureFire(插件进行单元测试)时
mvn surefire:test
Run Code Online (Sandbox Code Playgroud)
或者一次一次测试:
mvn -Dtest=MyUnitlTest
Run Code Online (Sandbox Code Playgroud)
小智 8
我喜欢这样,所以每个阶段都会正常执行:
mvn -Dtest=foo -DfailIfNoTests=false verify
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49015 次 |
| 最近记录: |