这又是一个系列,一个要把Maven讲透的系列,希望能够对大家有帮助!
关于使用Maven进行测试,我本来是不想总结的,然后考虑到这个功能在实际开发中还经常使用,或者说,有的同学毕业后得第一份正式工作就是搞测试,编码写测试用例(其实我就是这样的)。所以,结合我自身的工作经历来看,我个人是非常崇尚测试,重视测试的,所以,这里我再通过这篇文章,对Maven是如何集成测试的进行简单的总结,方便大家有一个整体的印象和大的概念。
maven-surefire-plugin
简介 通过之前的学习,我们都知道Maven本身并不是一个单元测试框架,在Java中,主流的单元测试框架是JUnit和TestNG。而Maven所做的只是在构建执行到特定生命周期阶段的时候,通过插件来执行JUnit或者TestNG的测试用例。而这一常用的插件就是 maven-surefire-plugin
。
在默认情况下, maven-surefire-plugin
的test目标会自动执行测试源码路径下所有符合一组命名模式的测试类。这组模式为:
**/Test*.java **/*Test.java **/*TestCase.java
只要将测试类按照上述模式命名,Maven就能自动运行它们,用户也就不再需要定义聚合测试用例。
为了能够运行测试,Maven需要在项目中引入测试框架的依赖,在前面的文章都有说到,这里就不再总结。
有的时候,我说的是有些时候哈,为了更快的完成构建,我们会跳过费时的测试阶段,这个时候,我们只需要在执行 mvn
命令时加上 skipTests
参数即可,比如这样:
mvn clean package -DskipTests
或者,我们也可以在POM中对插件进行配置,比如这样:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin>
上面直接跳过全部测试,这样的确有点极端,很多时候,我们增加了一个测试类,为了节省时间,就不想将所有的测试用例都运行一篇,而只是将新增的测试类运行一遍就OK了,这个时候我们就需要动态指定要运行的测试用例。
maven-surefire-plugin
提供了一个test参数让Maven用户能够在命令行指定要运行的测试用例。比如这样:
mvn test -Dtest=LoginTest
这里test参数的值是测试用例的类名,这行命令的效果就是只有LoginTest这一个测试类得到运行。当然了, maven-surefire-plugin
的test参数还支持一些高级的赋值模式,比如这样:
mvn test -Dtest=Admin*Test
星号可以匹配零个或多个字符,上述命令会运行项目中所有类名以Admin开头、Test结尾的测试类。除了星号匹配,还可以使用逗号指定多个测试用例:
mvn test -Dtest=LoginTest,AdminSearchTest
通过命令行动态指定要运行的测试用例确实不错,但是如果要动态指定运行的测试用例比较多时,通过命令就比较麻烦;换一种方式来思考,那就是如何排除指定的测试用例呢?
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <excludes> <exclude>**/LoginTest.java</exclude> <exclude>**/Admin*Test.java</exclude> </excludes> </configuration> </plugin>
有了上面所示的 excludes
配置后, maven-surefire-plugin
就不再自动运行它们了。
在我以前的东家,如果需要安排系统上线,就必须要提交系统测试报告。而通过 maven-surefire-plugin
插件,就可以生成简单明了的系统测试报告。默认情况下, maven-surefire-plugin
会在项目的target/surefire-reports目录下生成两种格式的错误报告:
简单文本格式
简单的文本格式信息如下:
------------------------------------------------------------------------------- Test set: com.jellythink.HelloWorld.AppTest ------------------------------------------------------------------------------- Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec
上面就看个人项目的需要了,按照需要生成即可,非常的方便。
这篇文章主要总结了Maven中的测试,具体的就是围绕着 maven-surefire-plugin
这个官方默认插件进行的总结。这里总结的测试,在你将来的职业生涯中不一定会遇到或者使用到,但是至少我这里总结的内容会对你以后的工作可以提供一点点的指点,那就足够了!
果冻想,玩代码,玩即使!
2019年4月28日,于内蒙古呼和浩特。