gradle kotlin dsl中,如何调用动态测试扩展?
In gradle kotlin dsl, how to call a dynamic test extension?
我正在尝试在使用 gradle ScalaTest 插件时添加一个新的配置选项:
https://github.com/maiflai/gradle-scalatest
在其源代码中,配置作为动态扩展被注入测试 class:
static void configure(Test test) {
...
Map<String, ?> config = [:]
test.extensions.add(ScalaTestAction.CONFIG, config)
test.extensions.add("config", { String name, value -> config.put(name, value) })
test.extensions.add("configMap", { Map<String, ?> c -> config.putAll(c) })
...
}
如果使用 groovy 作为 dsl,调用这个 属性 很容易:
test {
configMap([
'db.name': 'testdb'
'server': '192.168.1.188'
])
}
不幸的是,由于静态类型,kotlin dsl 无法使用此方法,当作为测试插件调用时,它在测试范围内清晰可见,例如当使用 extensions.getByName:
tasks {
test {
val map = extensions.getByName("configMap")
println(map)
}
}
它产生以下输出:
...
> Configure project :
com.github.maiflai.ScalaTestPlugin$_configure_closure6@45c21cac
但是在编译时无法检索或断言其类型,最终无用(除非使用反射,这有悖于kotlin dsl的设计理念)。 kotlin dsl 有没有简单的方法来实现同样的目标?
我在Scala测试gradle插件中看到动态扩展是这样定义的:
test.extensions.add("configMap", { Map<String, ?> c -> config.putAll(c) })
你看到的com.github.maiflai.ScalaTestPlugin$_configure_closure6@45c21cac
应该是(Map<String, Any>) -> Unit
类型的闭包,也就是说你可以这么做。我们必须更改映射值,所以我们假设它也是可变的。
extensions.getByName("configMap").closureOf<MutableMap<String, Any?>> {
this["db.name"] = "testdb"
this["server"] = "192.168.1.188"
}
构建良好,但我没有安装 Scala,也从未使用过 Scala 测试。我不知道它是否真的有效,所以请告诉我。
我正在尝试在使用 gradle ScalaTest 插件时添加一个新的配置选项:
https://github.com/maiflai/gradle-scalatest
在其源代码中,配置作为动态扩展被注入测试 class:
static void configure(Test test) {
...
Map<String, ?> config = [:]
test.extensions.add(ScalaTestAction.CONFIG, config)
test.extensions.add("config", { String name, value -> config.put(name, value) })
test.extensions.add("configMap", { Map<String, ?> c -> config.putAll(c) })
...
}
如果使用 groovy 作为 dsl,调用这个 属性 很容易:
test {
configMap([
'db.name': 'testdb'
'server': '192.168.1.188'
])
}
不幸的是,由于静态类型,kotlin dsl 无法使用此方法,当作为测试插件调用时,它在测试范围内清晰可见,例如当使用 extensions.getByName:
tasks {
test {
val map = extensions.getByName("configMap")
println(map)
}
}
它产生以下输出:
...
> Configure project :
com.github.maiflai.ScalaTestPlugin$_configure_closure6@45c21cac
但是在编译时无法检索或断言其类型,最终无用(除非使用反射,这有悖于kotlin dsl的设计理念)。 kotlin dsl 有没有简单的方法来实现同样的目标?
我在Scala测试gradle插件中看到动态扩展是这样定义的:
test.extensions.add("configMap", { Map<String, ?> c -> config.putAll(c) })
你看到的com.github.maiflai.ScalaTestPlugin$_configure_closure6@45c21cac
应该是(Map<String, Any>) -> Unit
类型的闭包,也就是说你可以这么做。我们必须更改映射值,所以我们假设它也是可变的。
extensions.getByName("configMap").closureOf<MutableMap<String, Any?>> {
this["db.name"] = "testdb"
this["server"] = "192.168.1.188"
}
构建良好,但我没有安装 Scala,也从未使用过 Scala 测试。我不知道它是否真的有效,所以请告诉我。