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

3yhwsihp  于 2023-04-06  发布在  Kotlin
关注(0)|答案(3)|浏览(183)

我想为我的Kotlin代码写一个单元测试,并使用junit/hamcrest匹配器,我想使用is方法,但它是Kotlin中的保留字。
我怎样才能得到下面的编译?

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

目前,我的IDE,InteliJ是突出显示,作为一个编译错误,说它是期待一个)is

vwoqyblh

vwoqyblh1#

您可以在导入时使用as关键字将is别名为Is(例如)。
例如:

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

参见https://kotlinlang.org/docs/packages.html#imports

qyzbxkaa

qyzbxkaa2#

在Kotlin中,is是一个保留字。为了解决这个问题,你需要使用反引号来转义代码,所以下面的代码将允许你编译代码:

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

hgtggwj03#

正如其他人指出的,在Kotlin中,is是一个保留字(参见Type Checks)。但这对Hamcrest来说不是一个大问题,因为is函数只是一个装饰器。它用于提高代码的可读性,但它不是正常运行所必需的。
您可以自由使用更短的Kotlin友好表达式。
1.平等:

assertThat(cheese, equalTo(smelly))

而不是:

assertThat(cheese, `is`(equalTo(smelly)))
  1. matcher decorator:
assertThat(cheeseBasket, empty())

而不是:

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

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

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

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

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

相关问题