如何编译使用hamcrest'的'Kotlin单元测试代码'是'

时间:2016-10-13 16:05:39

标签: unit-testing junit kotlin hamcrest

我想为我的Kotlin代码编写单元测试并使用junit / hamcrest匹配器,我想使用is方法,但它是Kotlin中的保留字。

如何进行以下编译?

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

目前我的IDE,InteliJ强调这是一个编译错误,说它在)后期待is

3 个答案:

答案 0 :(得分:28)

使用is关键字导入时,您可以为Is设置别名(比如as)。

E.g:

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

请参阅https://kotlinlang.org/docs/reference/packages.html

答案 1 :(得分:27)

在Kotlin中,is是一个保留字。要解决此问题,您需要使用反引号来转义代码,因此以下内容将允许您编译代码:

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

答案 2 :(得分:3)

正如其他人指出的那样,在Kotlin中,is是保留字(请参阅Type Checks)。但这对Hamcrest来说不是什么大问题,因为is函数只是一个装饰器。它用于提高代码的可读性,但并不是正常运行所必需的。

您可以随意使用简短的Kotlin友好表达式。

  1. 平等:

    assertThat(cheese, equalTo(smelly))
    

    代替:

    assertThat(cheese, `is`(equalTo(smelly)))
    
  2. 匹配装饰器:

    assertThat(cheeseBasket, empty())
    

    代替:

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

另一个常用的Hamcrest匹配器是类似类型的检查

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

已弃用,而且它对Kotlin不友好。相反,建议您使用以下之一:

assertThat(cheese, isA(Cheddar.class))
assertThat(cheese, instanceOf(Cheddar.class))