kotlin Синтаксис тестовых функций Junit - PullRequest
0 голосов
/ 21 сентября 2018

Я изучал проект 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, поэтому пытаюсь понять этот код.

1 Ответ

0 голосов
/ 21 сентября 2018

Как вы уже догадались, это статический вызов метода.

Блок кода, следующий за ним, является лямбда-выражением, которое передается функции.(Если последний параметр является лямбда-выражением, Kotlin позволяет поставить его после скобок - и поскольку в этом случае других параметров нет, вы можете полностью удалить скобки. В этом случае это может показаться странным, но это может помочь написатьполезные методы, которые похожи на синтаксис языка, что отлично подходит, например, для DSL.)

Другая необычная вещь в этом случае - это то, что вызываемый метод - это Java.Java не имеет функциональных типов, но работает вокруг нее, имея «функциональные интерфейсы» (интерфейсы с одним абстрактным методом);Затем лямбды реализуют этот метод.Kotlin делает то же самое при вызове Java, поэтому размещенный вами код вызывает TestUtil.test () и передает ему экземпляр интерфейса ThrowingBiConsumer;экземпляр, который реализует соответствующий метод с кодом в фигурных скобках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...