How to compile Kotlin unit test code that uses hamcrest 'is'

后端 未结 3 1888
孤独总比滥情好
孤独总比滥情好 2021-02-12 02:55

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

相关标签:
3条回答
  • 2021-02-12 03:19

    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.

    1. equality:

      assertThat(cheese, equalTo(smelly))
      

      instead of:

      assertThat(cheese, `is`(equalTo(smelly)))
      
    2. 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))
    
    0 讨论(0)
  • 2021-02-12 03:26

    You can alias is (say to Is) when you import, using the as keyword.

    E.g:

     import org.hamcrest.CoreMatchers.`is` as Is
    

    See https://kotlinlang.org/docs/reference/packages.html

    0 讨论(0)
  • 2021-02-12 03:36

    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))
      }
    }
    
    0 讨论(0)
提交回复
热议问题