gpt4 book ai didi

kotlin Junit 测试函数语法

转载 作者:行者123 更新时间:2023-12-02 13:08:56 24 4
gpt4 key购买 nike

我正在浏览 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com