是否可以在lambda表达式中检索字符串?

时间:2017-01-13 18:48:45

标签: kotlin kotlintest

使用 String Spec 编写测试:

class stl : StringSpec() {

    init {

        "triangle.stl" {
             ...
        }
    }
}

是否可以在lambda表达式中检索"triangle.stl"

2 个答案:

答案 0 :(得分:3)

StringSpec看似不公开此信息,但您可以扩展StringSpec来执行此操作。 e.g:

class Spec : StringSpec() {
    init {
        "triangle.stl" { testCase ->
            println(testCase.name)
        }
    }

    operator fun String.invoke(test: (TestCase) -> Unit): TestCase {
        var tc: TestCase? = null
        tc = invoke(fun() { test(tc!!) })
        return tc
    }
}

或者为避免与exsting String.invoke发生功能冲突,您可以使用自己的语法对其进行扩展。 e.g:

class Spec : StringSpec() {
    init {
        "triangle.stl" testCase {
            println(name)
        }
    }

    infix fun String.testCase(test: TestCase.() -> Unit): TestCase {
        var tc: TestCase? = null
        tc = invoke { test(tc!!) }
        return tc
    }
}

答案 1 :(得分:1)

您必须自己存储对字符串的引用。像

这样的东西
class stl : StringSpec() {
    init {
        val spek = "triangle.stl"
        spek {
             // use spek in here
        }
    }
}