kotlin Junit 测试函数语法

标签 kotlin

我正在浏览 Javalin github 项目,发现下面的 kotlin 测试功能

@Test
fun `ApiBuilder prefixes paths with slash`() = TestUtil.test { app, http ->
    app.routes {
        //code
    }
    assertThat(http.getBody("/level-1/hello"), `is`("Hello from level 1"))
}

TestUtil.test 是一个静态方法,如下所示
public static void test(ThrowingBiConsumer<Javalin, HttpUtil> test) {
    test(Javalin.create(), test);
}

我不明白 TestUtil.test {} 代码块在 kotlin 测试中在做什么?是方法重载还是方法扩展还是调用静态方法?我是 Kotlin 的新手,所以试图理解这段代码。

最佳答案

如您所料,这是一个静态方法调用。

它后面的代码块是一个 lambda,它被传递给函数。 (如果最后一个参数是 lambda,Kotlin 允许您将其放在括号之后 - 由于在这种情况下没有其他参数,您可以完全删除括号。在这种情况下可能看起来令人困惑,但它可以帮助编写看起来像语言语法的有用方法,这对于例如 DSL 来说非常有用。)

这个案例的另一个不寻常之处是被调用的方法是 Java。 Java 没有函数类型,但可以通过“函数式接口(interface)”(与单个抽象方法的接口(interface))来解决它;然后 lambdas 实现该方法。 Kotlin 在调用 Java 时也是如此,因此您发布的代码是调用 TestUtil.test() 并将 ThrowingBiConsumer 接口(interface)的实例传递给它;使用大括号中的代码实现相关方法的实例。

关于kotlin Junit 测试函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52447546/

相关文章:

Android Kotlin Gson 慢速Json反序列化

google-app-engine - 使用 Ktor 进行部署 : How To Set AppEngine Version?

android - 在 Android Espresso 中按下概览按钮

kotlin - 如何在Tornadofx的ImageView中加载固定大小的图像

java - 如何在饼图外添加标签

android - TaskStackBuilder addParentStack() 方法不起作用

java - 在高阶函数中调用带有参数的 lambda

documentation - 在 Kotlin 中记录函数参数的参数

android - 无法在分离 View 上启动动画师

android - Kotlin:EditText 在 afterTextChanged() 中为空