阻止maven中的unit testing,但允许集成testing
我有一个Maven构build,我使用SureFire插件来运行一些unit testing,而FailSafe插件来运行一些集成testing。 我想要一个只运行FailSafe插件testing的方法。
这对我来说不是一个好的解决scheme,因为它是一个多模块构build,我不想编辑每个模块的pom。
有skip.tests
和maven.test.skip
和skipTests
停止所有的testing,并skipITs
,只停止故障安全插件。
那么,是否有像skipITs
这样的maven的命令行标志,而是具有“onlyITs”的function呢?
我发现只跳过surefiretesting的最简单的方法是configurationsurefire( 但不是失败安全 ),如下所示:
<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
,只有确定的,不会失败的,testing将被跳过; 它还将运行所有其他必要的阶段,包括预集成和后整合,还将运行verify
目标,如果您的集成testing失败,那么实际上会失败您的Maven构build 。
请注意,这重新定义了用于指定testing应该跳过的属性,所以如果您提供规范-DskipTests=true
, -DskipTests=true
将忽略它,但是-DskipTests=true
保护会尊重它,这可能是意外的,特别是如果您有现有的构build/该标志已经。 一个简单的解决方法似乎是在您的<properties>
pom <properties>
的<properties>
部分skip.surefire.tests
到skip.surefire.tests
的值:
<properties> <skip.surefire.tests>${skipTests}</skip.surefire.tests> </properties>
如果你需要的话,你可以提供一个名为skip.failsafe.tests
保护的参数,但是我没有发现它是必须的 – 因为unit testing通常在早期阶段运行,如果我想运行unit testing而不是集成testing,我会运行test
阶段,而不是verify
阶段。 你的经验可能会有所不同
这些skip.(surefire|failsafe).tests
属性应该可以集成到skip.(surefire|failsafe).tests
/ failsafe代码本身,但我不知道它会违反“他们是完全相同的插件除了一个微小的差异”的精神。
解决方法是调用:
mvn clean test-compile failsafe:integration-test
诚然,这是丑陋的,但它可能会解决你的问题。
或者(另一个黑客):
mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false
参考:
-
surefire:test#test
-
surefire:test#failIfNoTests
我使用Antonio Goncalves Blog的代码,这个代码非常完美。
您可以使用以下属性:
-DskipUTs=true
跳过-DskipUTs=true
testing。
-DskipITs=true
用于跳过故障安全testing。
-DskipTests=true
用于跳过所有testing。
我在Netbeans中创build了一个动作,允许我使用validation目标和属性来testing单个集成testing:
it.test=${packageClassName}
skipUTs=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>
希望这可以帮助!
尝试只用FailSafe(集成testing插件)运行testing – 它将允许您只运行这种命名的集成testing,默认情况下:* / IT .java,** / IT.java,* / * ITCase.java ;但是你可以很容易地从pom文件中改变它)
mvn failsafe:integration-test
而当你只想使用SureFire(插件进行unit testing)
mvn surefire:test
或一次testing一次:
mvn -Dtest=MyUnitlTest
我喜欢这样,所以每个阶段通常都会执行:
mvn -Dtest=foo -DfailIfNoTests=false verify
尝试在单独的configuration文件中运行集成或unit testing。 那么你可以启用/禁用configuration文件。