在kotest框架中,有一种方法可以使用custom tags对测试进行分组,您可以通过选择通过Gradle参数(如gradle test -Dkotest.tags="TestGroupOne"
)来运行特定的组
我有两个测试用例,一个有标记,另一个没有标记
object Linux : Tag()
class MyTests : StringSpec({
"without tag" {
"hello".length shouldBe 5
}
"with tag".config(tags = setOf(Linux)) {
"world" should startWith("wo2")
}
})
现在,如果我运行gradle build
,它将运行两个测试,但我希望运行默认情况下未标记的测试。
实现此行为的一种方法是在build.gradle.kts文件中添加一个任务
val test by tasks.getting(Test::class) {
systemProperties = System.getProperties()
.toList()
.associate { it.first.toString() to it.second }
if(!systemProperties.containsKey("kotest.tags"))
systemProperties["kotest.tags"] = "!Linux"
}
正如您所看到的,当没有为-Dkotest.tags
传递参数时,我手动将值!Linux
添加到systemProperties,以便build
脚本将运行默认情况下未标记的测试。
**问题:**是否有更好的方法来实现这一目标?
我甚至尝试在www.example.com文件中添加systemProp.gradle.kotest.tags="!Linux"
gradle.properties,但没有效果。
2条答案
按热度按时间7fhtutme1#
你的解决方案不是很健壮,因为你依赖于所使用的具体标记。似乎没有更简单的解决方案,因为标记表达式的语法不允许写类似“!any”的东西。
但是,可以编写一个Kotest扩展来满足您的需求,看起来像这样:
第一个函数
interceptProject
用于获取项目配置,以便确定当前测试运行的指定标记集。第二个函数
intercept
用于每个测试用例。在那里我们确定是否指定了任何标签。如果没有指定标签(即我们有一个空标签表达式),我们跳过所有在规范或测试用例中配置了任何标签的测试。否则,我们正常执行测试,然后它可能会被Kotlin的内置机制忽略,这取决于它的标签。该扩展可以在
ProjectConfig
中在项目范围内激活:现在,扩展就绪后,默认情况下只运行没有标记的测试,而不管您在项目中使用什么标记。
uhry853o2#
您可以在gradle配置中设置默认标签。例如: