Как скомпилировать код модульного теста Kotlin, который использует hamcrest 'is'

Я хочу написать модульный тест для своего кода Kotlin и использовать совпадения junit/hamcrest, я хочу использовать is метод, но это зарезервированное слово в Kotlin.

Как я могу получить следующее для компиляции?

class testExample{
  @Test fun example(){
    assertThat(1, is(equalTo(1))
  }
}

В настоящее время моя среда разработки InteliJ выделяет это как ошибку компиляции, говоря, что она ожидает ) после is?

2 ответа

Решение

В Котлине is это зарезервированное слово. Чтобы обойти это, вам нужно экранировать код с помощью обратных галочек, поэтому следующее позволит вам скомпилировать код:

class testExample{
  @Test fun example(){
    assertThat(1, `is`(equalTo(1))
  }
}

Вы можете псевдоним is (Сказать Is) при импорте с помощью as ключевое слово.

Например:

 import org.hamcrest.CoreMatchers.is as Is

См. https://kotlinlang.org/docs/reference/packages.html

Как отмечали другие, в Котлине is является зарезервированным словом (см. Проверка типов). Но это не большая проблема с Hamcrest, так как is Функция просто декоратор. Он используется для лучшей читаемости кода, но не является обязательным для правильного функционирования.

Вы можете использовать более короткое, дружественное к котлину выражение.

  1. равенство:

    assertThat(cheese, equalTo(smelly))
    

    вместо:

    assertThat(cheese, `is`(equalTo(smelly)))
    
  2. матч-декоратор:

    assertThat(cheeseBasket, empty())
    

    вместо:

    assertThat(cheeseBasket, `is`(empty()))
    

Другой часто используемый инструмент Hamcrest - это проверка типа

assertThat(cheese, `is`(Cheddar.class))

Это устарело и не дружественно к котлину. Вместо этого рекомендуется использовать одно из следующих:

assertThat(cheese, isA(Cheddar.class))
assertThat(cheese, instanceOf(Cheddar.class))
Другие вопросы по тегам