[英]kotlin Junit test functions syntax
我正在遍歷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);
}
我不了解Kotlin測試中的TestUtil.test {}代碼塊在做什么? 是方法重載或方法擴展,還是調用靜態方法? 我是Kotlin的新手,因此嘗試了解此代碼。
如您所料,這是一個靜態方法調用。
緊隨其后的代碼塊是lambda,將其傳遞給函數。 (如果最后一個參數是lambda,則Kotlin允許您將其放在括號后-並且由於在這種情況下沒有其他參數,因此您可以完全刪除括號。在這種情況下,這看起來可能令人困惑,但是它可以幫助編寫類似於語言語法的有用方法,對DSL來說非常有用。)
這種情況的另一個不同尋常的事情是被調用的方法是Java。 Java沒有函數類型,但是通過具有“函數接口”(具有單個抽象方法的接口)來解決該問題。 然后,lambdas實現該方法。 Kotlin在調用Java時會執行相同的操作,因此您發布的代碼將調用TestUtil.test()並將其傳遞給ThrowingBiConsumer接口的實例。 用括號括起來的代碼實現相關方法的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.