如何在单个build.gradle文件中运行不同包下的所有测试
跨多包/多服务Gradle测试运行解决方案
No tests found报错常见原因
- 测试扫描范围不匹配:你在
x.y.z包所属模块下执行命令时,Gradle默认仅扫描当前模块的测试源集,若目标测试类a.b.c.TestClass属于其他模块/其他服务的源码集,自然无法匹配到测试 - 测试源集配置错误:确认目标测试类所在目录已在对应模块的
build.gradle中被标记为测试源集,参考配置:
sourceSets { test { java.srcDirs = ['src/test/java', '目标测试类所在的源码目录路径'] } }
- 测试类全限定名拼写错误:核对目标测试类的包名、类名是否和
--tests参数后的内容完全一致,大小写敏感
跨包/跨服务测试运行方案
同模块跨多个包运行测试
所有测试属于同一Gradle模块,仅分布在不同包下时,可叠加多个--tests参数实现多规则匹配,多个参数为或的关系:
- 运行指定多个包下的所有测试:
gradle test --tests "a.b.c.*" --tests "x.y.z.*" - 运行指定多个独立测试类:
gradle test --tests "a.b.c.TestClassA" --tests "x.y.z.TestClassB" - 运行所有包下包含指定关键字的测试:
gradle test --tests "*LoginTest*"
多模块(多服务)项目跨模块运行测试
多个服务对应Gradle多个子模块时,按需求选择对应命令:
- 运行所有服务下符合包规则的测试:在项目根目录执行
gradle test --tests "a.b.c.*" --tests "d.e.f.*",Gradle会自动扫描所有子模块的测试源集匹配规则 - 运行指定几个服务下的全部测试:
gradle :service1:test :service2:test :service3:test,直接指定多个子模块的test任务即可 - 运行指定几个服务下符合包规则的测试:
gradle :service1:test :service2:test --tests "a.b.c.*",仅在指定的服务范围内匹配测试规则
匹配规则调试方法
如果仍无法匹配到目标测试,可执行gradle test --tests "*" --dry-run,该命令不会实际执行测试,仅会输出所有可匹配的测试任务列表,可对照输出调整匹配规则。
内容的提问来源于stack exchange,提问作者Brucio
相关产品推荐
相关产品推荐

