如何在不实际运行的情况下列出`mvn test`命令将要执行的测试用例?
Maven Surefire插件:如何仅预览待执行的测试用例(不实际运行)?
先聊聊Surefire插件默认的测试类识别规则——它会自动通过以下通配符匹配所有要执行的测试类:
**/Test*.java:包含所有子目录中文件名以"Test"开头的Java文件**/*Test.java:包含所有子目录中文件名以"Test"结尾的Java文件**/*Tests.java:包含所有子目录中文件名以"Tests"结尾的Java文件**/*TestCase.java:包含所有子目录中文件名以"TestCase"结尾的Java文件
但实际开发中,我们经常会遇到这类场景:项目里有大量耗时的测试用例,或者混合了JUnit4和JUnit5的测试代码,要是每次都得手动排查哪些测试会被执行(尤其是之前跳过了单元测试的情况),真的很浪费时间。这时候很多人都会问:能不能只做个"空运行",只查看将要被执行的测试用例清单,不用实际跑测试?
先给你看一段正常测试执行时的输出示例:
T E S T S
Running JUnitAndMockitoWorksTest
Running JUnit4AndMockitoWorksTest
Running JUnit5AndMockitoWorksTest
那回到核心问题:有没有办法实现这种预览?
之前有个Maven相关的讨论提到过一个第三方维护的feature/dryrun分支的Surefire插件,但这个分支已经整整9年没有更新了,完全无法支持JUnit5这类新特性,根本没法在现代项目里使用。
不过别担心,Surefire插件本身其实提供了官方的解决方案——你可以使用test目标配合-Dsurefire.printTestsOnly=true参数,这个参数会让插件只输出所有匹配规则的测试类列表,而不会实际执行任何测试用例。
举个实际的命令示例:
mvn test -Dsurefire.printTestsOnly=true
执行这个命令后,你就能看到所有将要被运行的测试类清单,完美满足预览需求,而且对JUnit4、JUnit5都能很好地兼容,比那个过时的第三方分支靠谱多了。
内容的提问来源于stack exchange,提问作者Paul Verest on LinkedIn
相关产品推荐
相关产品推荐

