簡體   English   中英

Kotlin Junit測試功能語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM