10.3 跳过测试
日常工作中,软件开发人员总有很多理由来跳过单元测试,“我敢保证这次改动不会导致任何测试失败”,“测试运行太耗时了,暂时跳过一下”,“有持续集成服务跑所有测试呢,我本地就不执行啦”。在大部分情况下,这些想法都是不对的,任何改动都要交给测试去验证,测试运行耗时过长应该考虑优化测试,更不要完全依赖持续集成服务来报告错误,测试错误应该尽早在尽小范围内发现,并及时修复。
不管怎样,我们总会要求Maven跳过测试,这很简单,在命令行加入参数skipTests就可以了。例如:
$mvn package-DskipTests
Maven输出会告诉你它跳过了测试:
[INFO]——maven-compiler-plugin:2.0.2:testCompile(default-testCompile)@ac-
count-captcha——
[INFO]Compiling 2 source files to D:\code\ch-10\account-aggregator\account-
captcha\target\test-classes
[INFO]
[INFO]——maven-surefire-plugin:2.4.3:test(default-test)@account-captcha——
[INFO]Tests are skipped.
当然,也可以在POM中配置maven-surefire-plugin插件来提供该属性,如代码清单10-12所示。但这是不推荐的做法,如果配置POM让项目长时间地跳过测试,则还要测试代码做什么呢?
代码清单10-12 配置插件跳过测试运行
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
有时候用户不仅仅想跳过测试运行,还想临时性地跳过测试代码的编译,Maven也允许你这么做,但记住这是不推荐的:
$mvn package-Dmaven.test.skip=true
这时Maven的输出如下:
[INFO]——maven-compiler-plugin:2.0.2:testCompile(default-testCompile)@ac-
count-captcha——
[INFO]Not compiling test sources
[INFO]
[INFO]——maven-surefire-plugin:2.4.3:test(default-test)@account-captcha——
[INFO]Tests are skipped.
参数maven.test.skip同时控制了maven-compiler-plugin和maven-surefire-plugin两个插件的行为,测试代码编译跳过了,测试运行也跳过了。
对应于命令行参数maven.test.skip的POM配置如代码清单10-13所示,但这种方法也是不推荐使用的。
代码清单10-13 配置插件跳过测试编译和运行
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
实际上maven-compiler-plugin的testCompile目标和maven-surefire-plugin的test目标都提供了一个参数skip用来跳过测试编译和测试运行,而这个参数对应的命令行表达式为maven.test.skip。