【发布时间】:2020-05-13 03:23:52
【问题描述】:
我有这样的事情:
fun doSomething(specifyInput: Base.() -> Unit) {
val spec = BaseImpl()
spec.apply {
specifyInput()
validate()
}
interface Base {
var a: String?
var b: String?
}
class BaseImpl(override var a: String?, override var b: String?) : Base {
constructor() : this(null, null)
fun validate() {
if (a == null) throw ExceptionForA()
if (b == null) throw ExceptionForB()
}
}
这是 gradle 任务。
class A : DefaultTask(), Base by BaseImpl()
@TaskAction
fun doSomething() {
doSomething {
a = c
}
}
这是我的测试:
val buildFile = File(testProjectDir, "build.gradle.kts")
buildFile.createNewFile()
buildFile.writeText("""
tasks.register("task", A::class.java) {
c = "something"
}
""".trimIndent())
val result = testProjectDir.executeAndFailGradleRunner("task")
assertThat(result.output).contains("ExceptionForB")
你知道我需要做什么才能通过测试吗?
提前谢谢你。
更新:同时我已经扩展了代码示例。
找到了我正在寻找的解决方案。
【问题讨论】:
-
在 lambda 中你会得到一个
this接收器,你可以只做download { url = /*your url*/; target = /*your file*/ }(在单独的行中;不是必需的) -
什么意思?这里的任务是什么?编辑您的问题并总结问题。
-
我编辑了我的问题并总结了问题。
-
你必须设置这两个变量,就好像其中一个变量为 null 然后引发异常。
-
我不明白应该在哪里设置这两个变量。可以举个例子吗?