maven的重要职责之一就是自动运行单元测试,它通过maven-surefire-plugin与主流的单元测试框架junit和testng集成,并且能够自动生成丰富的结果报表。
maven并不是一个单元测试框架,他只是在构建执行打特定的生命周期阶段的时候,通过插件来执行JUnit或testNG的测试用例,这个插件就是maven-surefire-plugin,也叫做测试运行器。maven-surefire-plugin会自动执行测试源码路劲下(src/test/java)的所有符合以下命名模式的测试用例
**/Test*.java:任何子目录下的所有命名以Test开头的java类
**/**Test.java:任何子目录下的所有命名以Test结尾的java类
**/**TestCase.java:任何子目录下的所有命名以TestCase结尾的java类
只要将测试类按上述模式命名,maven就能自动运行它们,用户也就不再需要定义测试集合(testsuite)来聚合测试用例了。
当然也可以自定义来包含一些不符合上述命名规则的测试类,以下定义以Tests结尾的用例:
|
日常工作中,软件开发人员总有很多理由来跳过单元测试,“我敢保证这次改动不会导致任何测试失败,测试运行太耗时了,暂时跳过一,有持续集成服务跑所有测试呢,我本地就不执行啦。在大部分情况下,这想法都是不对的。任何改动都要交给测试去验证,测试运行耗时过长应该考虑优化测试,更不要完全依赖持续集成服务来报告错误,测试错误应该尽早在尽小范围内发现,并及时修复。
maven同时也可以通过设置skipTest来跳过测试。
测试报告:
surefire会在target-report下生成两种格式的错误与报告,简单文本格式和支持JUnit的XML格式。
测试覆盖率报告:
cobertura是一个开源的测试覆盖率统计工具,使用时添加插件cobertura-maven-plugin
testng:
可以使用testing.xml的文件,来配置想要运行的测试集合。然后再pom文件里在配置使用该文件。