如何使用Maven进行测试
Maven的重要职责之一就是自动运行单元测试,它通过maven-surefire-plugin与主流的单元测试框架JUnit3、JUnit4以及TestNG集成,并且能够自动生成丰富的结果报告。
test阶段被定义“使用单元测试框架运行测试”。生命周期阶段需要丙丁某个插件的目标才能完成真正的工作,test阶段正式与maven-surefire-plugin的test目标相绑定,这是一个内置的绑定。
在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(默认为src/test/java/)下所有符合一组命名模式的测试类。这组模式为:
- */Test.java
- **/*Test.java
- **/*TestCase.java
只要将测试类按上述模式命名,Maven就能自动运行它们,用户也就不再需要定义测试集合(TestSuite)来聚合测试用例了(TestCase)。
跳过测试
- 在命令行里加入参数 skipTests就可以跳过测试的执行
- 配置 POM 让项目长时间跳过单元测试
<configuration>
<skipTests>true</skipTests>
</configuration>
- maven package -Dmaven.test.skip = ture,参数maven.test.skip同时控制了maven-compiler-plugin和maven-surefire-plugin两个插件,测试代码编译跳过了,测试运行也跳过了
动态指定要运行的测试用例
- maven-surefire-plugin 提供了一个test参数
$ mvn test -Dtest = RadomGeneratorTest
- 也支持模式匹配,多个测试用例
包含与排除测试用例
- 包含 include
<configuration>
<includes>
<include>**/*Test.java<include>
<includes>
</configuration>
- 排除 exclude
测试覆盖率报告
- $mvn cobertura:cobertura
重用测试代码
牛逼程序员会想对待产品代码一样细心维护测试代码,尤其是那些具体测试类继承的抽象类,它们能够简化测试代码的编写。
在命令行运行mven package的时候,Maven会将项目的主代码及资源文件打包,将其安装或部署仓库之后,这些代码就能为他人使用,从而实现Maven项目级别的重用。默认的打包行为是不会包含测试代码的,因此在使用外部依赖的时候,其构件一般都不会包含测试代码。
maven-jar-plugin
<executions>
<execution>
<goals>
<goal>test-jar<goal>
</goals>
</execution>
</executions>
maven-jar-plugin有两个目标,分别是jar和test-jar,前者通过Maven的内置绑定在default生命周期的package阶段运行,其行为就是对项目主代码进行打包,而后者并没有内置绑定,因此上述的插件配置显式声明该目标来打包测试代码。