web-dev-qa-db-ja.com

hamcrestの 'is'を使用するKotlinユニットテストコードをコンパイルする方法

Kotlinコードの単体テストを記述してjunit/hamcrestマッチャーを使用したいのですが、isメソッドを使用したいのですが、これはKotlinの予約語です。

以下をコンパイルするにはどうすればよいですか?

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

現在、私のIDEであるInteliJは、)の後is

24
thecoshman

Kotlinでは、isは予約語です。これを回避するには、バッククォートを使用してコードをエスケープする必要があるため、次のコードでコードをコンパイルできます。

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

isキーワードを使用してインポートする場合、Isasなど)にエイリアスを設定できます。

例えば:

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

https://kotlinlang.org/docs/reference/packages.html を参照してください

36
David Soroko

他の人が指摘したように、Kotlinではisは予約語です( Type Checks を参照)。しかし is 関数は単なるデコレータなので、これはHamcrestでは大きな問題ではありません。コードを読みやすくするために使用されますが、適切に機能するために必要ではありません。

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))
4
naXa