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。