Reputation: 8650
I want to write a unit test for my Kotlin code and use junit/hamcrest matchers, I want to use the is
method, but it is a reserved word in Kotlin.
How can I get the following to compile?
class testExample{
@Test fun example(){
assertThat(1, is(equalTo(1))
}
}
Currently my IDE, InteliJ is highlighting that as a compilation error, saying it is expecting a )
after is
?
Upvotes: 35
Views: 13481
Reputation: 9086
You can alias is
to Is
(for example) in the import
statement using the as
keyword.
For example:
import org.hamcrest.CoreMatchers.`is` as Is
See https://kotlinlang.org/docs/packages.html#imports
Upvotes: 46
Reputation: 37916
As others pointed out, in Kotlin, is
is a reserved word (see Type Checks). But it's not a big problem with Hamcrest since is
function is just a decorator. It's used for better code readability, but it's not required for proper functioning.
You are free to use a shorter Kotlin-friendly expression.
equality:
assertThat(cheese, equalTo(smelly))
instead of:
assertThat(cheese, `is`(equalTo(smelly)))
matcher decorator:
assertThat(cheeseBasket, empty())
instead of:
assertThat(cheeseBasket, `is`(empty()))
Another frequently used Hamcrest matcher is a type-check like
assertThat(cheese, `is`(Cheddar.class))
It's deprecated and it's not Kotlin-friendly. Instead, you're advised to use one of the following:
assertThat(cheese, isA(Cheddar.class))
assertThat(cheese, instanceOf(Cheddar.class))
Upvotes: 17
Reputation: 8650
In Kotlin, is
is a reserved word . To get around this you need to escape the code using backticks, so the following will allow you to compile the code:
class testExample{
@Test fun example(){
assertThat(1, `is`(equalTo(1))
}
}
Upvotes: 42