java - 如何使用 Gradle 运行多个命名测试?
问题描述
我知道怎么说
gradle test --tests mypackage.MyTest
但是如何指定多个?
gradle test --tests mypackage.MyTest,mypackage.model.ModelTest,BasicTests
这似乎只是随机运行其中一项测试。
gradle test --tests mypackage.MyTest mypackage.model.ModelTest BasicTests
这告诉我
在根项目“myproject”中找不到任务“mypackage.model.ModelTest”。
我阅读了很多手册和教程(以及一些 SO 帖子),但没有明确提及答案。但是我看到有人通过 --tests "somepackage.*" 作为参数,所以我认为空格周围的引号可能会有所帮助。
gradle test --tests "mypackage.MyTest mypackage.model.ModelTest BasicTests"
这不会很快失败,但不幸的是只运行列表中的第一个测试。
所以我想我只是被“--tests”中的复数误导了,没有办法真正给它一个列表,对吧?
解决方案
关于Java 和 JVM 项目测试的文档文章非常清楚地说明了该--tests
选项的工作原理。它只是一个包容性过滤器,用于注册要执行的所有匹配测试,与在任务块中使用includeTestsMatching
的方式相同:filter
Test
test {
filter {
includeTestsMatching 'org.gradle.internal.*'
}
}
这也是参数名称中使用复数的原因,因为通配符允许包含任意数量的测试。
注意通配符
'*'
对'.'
包分隔符没有特殊的理解。它纯粹基于文本。所以--tests *.SomeTestClass
将匹配任何包,无论其“深度”如何。
从 Gradle 4.7 开始,如果您以大写字母开头过滤器,则可以使用没有包信息的简单类名。
要包含不共享通用包结构的多个测试,您必须并且可以使用多个--tests
参数,如文档中所述:
另请注意,可以提供多个
--tests
选项,其所有模式都将生效。
可以在上面的链接和这个相关问题中找到有关测试过滤器的其他信息:
正如有关您的一种方法为何不起作用的附加信息一样:
在命令行上执行 Gradle 符合以下结构。任务名称前后都可以有选项。
gradle [taskName...] [--option-name...]
在您的第三个示例中,该选项的其他--tests
选项被解释为任务名称,这解释了错误消息,因为具有指定名称的任务不存在。
为了防止选项值和任务名称之间的混淆并阻止任何 shell 干扰,您应该按照Haki 先生在他的博客中的建议在引号之间定义过滤器。
推荐阅读
- node.js - Discord.js - 随机获取一个有反应的用户
- javascript - 如何使用 @tensorflow/tfjs-node v2 保存模型?
- python - argparse - 如何将参数从 args 传递到函数中?
- vue.js - 如何使用 Vue js 从数据数组中加载图像?
- dataframe - PySpark DataFrame 过滤器列包含多个值
- java - Maven - 无法在本地解析版本范围的 Maven 依赖项
- numpy - opencv从某个点查找图像中每个像素的距离?
- javascript - Discord bot 为不同角色提供不同级别的发薪日奖励
- html - 在底部粘贴页脚
- ios - 文本未根据选择器正确更新