web-dev-qa-db-fra.com

Comment compiler le code de test unitaire Kotlin qui utilise hamcrest 'is'

Je veux écrire un test unitaire pour mon code Kotlin et utiliser des égaliseurs junit/hamcrest, je veux utiliser la méthode is, mais c'est un mot réservé dans Kotlin.

Comment puis-je obtenir les éléments suivants à compiler?

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

Actuellement mon IDE, InteliJ souligne que comme une erreur de compilation, en disant qu'il attend un ) après is?

24
thecoshman

Dans Kotlin, is est un mot réservé. Pour contourner ce problème, vous devez échapper le code à l'aide de raccourcis, de sorte que ce qui suit vous permettra de compiler le code:

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

Vous pouvez créer un alias is (par exemple, Is) lorsque vous importez à l'aide du mot clé as.

Par exemple:

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

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

36
David Soroko

Comme d'autres l'ont souligné, dans Kotlin, is est un mot réservé (voir Type Checks ). Mais ce n'est pas un gros problème avec Hamcrest puisque la fonction is n'est qu'un décorateur. Il est utilisé pour une meilleure lisibilité du code, mais il n'est pas requis pour un bon fonctionnement.

Vous êtes libre d'utiliser une expression plus courte compatible avec Kotlin.

  1. égalité:

    assertThat(cheese, equalTo(smelly))
    

    au lieu de:

    assertThat(cheese, `is`(equalTo(smelly)))
    
  2. décorateur matcher:

    assertThat(cheeseBasket, empty())
    

    au lieu de:

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

Un autre matcher Hamcrest fréquemment utilisé est une vérification de type comme

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

Il est obsolète et n'est pas compatible avec Kotlin. Au lieu de cela, il est conseillé d'utiliser l'un des éléments suivants:

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