2

使用String Spec编写测试:

class stl : StringSpec() {

    init {

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

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

4

2 回答 2

3

它看起来不像StringSpec公开此信息,但您可以扩展StringSpec这样做。例如:

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
    }
}

或者为了避免与现有的函数冲突,String.invoke您可以使用自己的语法对其进行扩展。例如:

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
    }
}
于 2017-01-13T19:47:57.680 回答
1

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

class stl : StringSpec() {
    init {
        val spek = "triangle.stl"
        spek {
             // use spek in here
        }
    }
}
于 2017-01-13T19:47:29.700 回答