反复运行单个测试用例是日常开发中很常见的行为。例如,项目代码中有一个失败的测试用例,开发人员就会想要再次运行这个测试以获得详细的错误报告,在修复该测试的过程中,开发人员也会反复运行他,以确认修复代码是正确的。如果仅仅为了一个失败的测试用例而反复运行所有测试,未免太浪费时间了,当项目中测试的数目比较大的时候,这种浪费尤为明显。
maven-surefire-plugin提供了一个test参数让Maven用户能够在命令行指定要运行的测试用例。例如,如果只想运行RandomStringTest,就可以使用如下命令:
$ mvn test -Dtest=RandomStringTest
这里test参数的值是测试用例的类名,这行命令的效果就是只有RandomStringTest这一个测试类得到运行。
maven-surefire-plugin的test参数还支持高级一些的赋值方式,能让用户更灵活的指定需要运行得测试用例。例如:
$ mvn test -Dtest=Random*Test
星号可以匹配零个或多个字符,上述命令会运行项目中所有类名以Random开头、Test结尾的测试类。
除了星号匹配,还可以使用逗号指定多个测试用例:
$ mvn test -Dtest = RandomStringTest,HelloWorldTest
该命令的test参数值是两个测试类名,他们之间用逗号隔开,其效果就是告诉Maven只运行这两个测试类。
当然,也可以结合使用星号和逗号。例如:
$ mvn test -Dtest = Random*Test,HelloWorldTest
需要注意的是,上述几种命令从命令行动态指定测试类的方法都应该只是临时使用,如果长时间只运行项目的某几个测试,那么测试就会慢慢失去其本来的意义。
test参数的值必须匹配一个或者多个测试类,如果maven-surefire-plugin找不到任何匹配的测试类,就会报错并导致构建失败。
我们看到,使用test参数用户可以从命令行灵活的指定要运行的测试类。可惜的是,maven-surefire-plugin并没有提供任何参数支持用户从命令行跳过指定的测试类,好在用户可以通过在POM中配置maven-surefire-plugin排除特定的测试类。