我是kotlin
的新手(基本上是今天开始的)
我想为我的dsl
课程编写一个GRLMessage
类似的构建器。
data class GRLMessage(var method: GRLMethod, var headers: Map<String, String>, var multipart: Object) {
fun message(init: GRLMessage.() -> Unit) : GRLMessage {
init()
return this
}
fun method(init: GRLMessage.() -> GRLMethod) : GRLMessage {
method = init()
return this
}
fun headers(init: GRLMessage.() -> Unit) : GRLMessage {
init()
return this
}
fun header(init: GRLMessage.() -> Pair<String, String>) : GRLMessage {
headers.plus(init())
return this
}
fun multipart(init: GRLMessage.() -> Object) : GRLMessage {
multipart = this.init()
return this
}
}
为了检查它,我添加了测试。
import org.junit.Assert.*
import org.junit.*
class GRLMessageTest {
data class DummyMultipart(val field: String) {}
@Test fun grlMessageBuilderTest() {
val grlMessage = GrlMessage().message {
method { GRLMethod.POST }
headers {
header { Pair("contentType", "object") }
header { Pair("objectType", "DummyMultipart") }
}
multipart { DummyMultipart("dummy") }
}
val multipart = DummyMultipart("dummy")
val headers = mapOf(
Pair("contentType", "object"),
Pair("objectType", "DummyMultipart")
)
val method = GRLMethod.POST
assertEquals(multipart, grlMessage.multipart)
assertEquals(headers, grlMessage.headers)
assertEquals(method, grlMessage.method)
}
}
两个类都在相同的包中(相对 - 一个在src/main/kotlin
,另一个在src/test/kotlin
)。
当我尝试使用gradle build
构建应用程序时,compileTestKotlin
任务失败
GRLMessageTest.kt: (13, 26): Unresolved reference: GrlMessage
GRLMessageTest.kt: (14, 13): Unresolved reference: method
GRLMessageTest.kt: (15, 13): Unresolved reference: headers
GRLMessageTest.kt: (17, 17): Unresolved reference: header
GRLMessageTest.kt: (19, 13): Unresolved reference: multipart
有什么问题?
这是布局
这是具体子项目和插件的build.gradle
答案 0 :(得分:4)
您的类与测试中对类的引用之间存在命名不匹配。
您的课程名为GRLMessage
,但在您的考试中,您将其引用为GrlMessage
,而Kotlin则区分大小写。因此,这些不被认为是相同的。您需要在两者中使用完全相同的标识符。