#unit-testing #junit #kotlin #hamcrest
#модульное тестирование #junit #kotlin #hamcrest
Вопрос:
Я хочу написать модульный тест для своего кода Kotlin и использовать сопоставители junit / hamcrest, я хочу использовать is
метод, но это зарезервированное слово в Kotlin.
Как я могу скомпилировать следующее?
class testExample{
@Test fun example(){
assertThat(1, is(equalTo(1))
}
}
В настоящее время моя среда разработки InteliJ выделяет это как ошибку компиляции, говоря, что она ожидает )
после is
?
Ответ №1:
При импорте вы можете использовать псевдоним is
to Is
(например), используя as
ключевое слово.
Например:
import org.hamcrest.CoreMatchers.`is` as Is
Смотрите https://kotlinlang.org/docs/reference/packages.html
Комментарии:
1. Вам все равно нужно будет ссылаться на
is
функцию при ее импорте, поэтому вам все равно нужно будет ее экранировать. Но это хороший трюк, который поможет вам избежать его повсеместного использования.2. Это правда, только один раз, что-то вроде: import org.hamcrest. Сопоставители.
is
как есть3. В этот момент это просто вопрос стиля. Лично я предпочел бы избежать имени функции лично.
4. Решать вам. С ‘aliasing’ вам нужно сделать это только один раз
Ответ №2:
В Kotlin is
это зарезервированное слово . Чтобы обойти это, вам нужно экранировать код с помощью обратных меток, поэтому следующее позволит вам скомпилировать код:
class testExample{
@Test fun example(){
assertThat(1, `is`(equalTo(1))
}
}
Комментарии:
1. Возможно, вы сможете использовать оператор инфикса, чтобы разрешить
assertThat(1 is equalTo(1))
… но я думаю, вам придется многое обернуть. Возможно, с помощью комбинации некоторой работы в стиле DSL вы дойдете до того, что можно написатьassertThat{ N isEqualTo 1}
, но я не склонен прилагать к этому усилия … пока
Ответ №3:
Как указывали другие, в Kotlin is
это зарезервированное слово (см. Проверки типов). Но это не большая проблема с Hamcrest, поскольку is
функция — это просто декоратор. Он используется для лучшей читаемости кода, но не требуется для правильного функционирования.
Вы можете использовать более короткое выражение, подходящее для Kotlin.
- равенство:
assertThat(cheese, equalTo(smelly))
вместо:
assertThat(cheese, `is`(equalTo(smelly)))
- декоратор сопоставления:
assertThat(cheeseBasket, empty())
вместо:
assertThat(cheeseBasket, `is`(empty()))
Другим часто используемым средством сопоставления Hamcrest является проверка типа, например
assertThat(cheese, `is`(Cheddar.class))
Он устарел и не подходит для Kotlin. Вместо этого рекомендуется использовать одно из следующих:
assertThat(cheese, isA(Cheddar.class))
assertThat(cheese, instanceOf(Cheddar.class))
Комментарии:
1. О, это на самом деле довольно приятно знать. Никогда не знал, что это был в основном избыточный дополнительный вызов.