J'ai trouvé Les gens utilisent-ils HAMCREST code> commode à utiliser avec
Junit code>. Maintenant, je vais utiliser
scalatest code>. Je sais que je peux utiliser
hamcrest code> mais je me demande si je devrais vraiment devrais em>. N'a-t-elle pas
Scalatest CODE> fournir une fonctionnalité similaire? Y a-t-il une autre bibliothèque Scala à cette fin (correspondants)? p>
HAMCREST code> avec
SCALATEST code>? p>
3 Réponses :
Scalatest a bâti-in Correspondants . Nous utilisons aussi attente . Dans certains cas, il est plus concis et plus flexible que les correspondants (mais il utilise des macros, elle nécessite donc au moins 2,10 version de Scala). P>
Non, vous n'avez pas besoin de hachocrest avec ScalAtest. Il suffit de mélanger dans le Exemple : p> dactmathatchers code> ou
mustMatchers code> trait avec votre spécification. La différence entre
doit code> et
doit simplement utiliser code> que vous utilisez simplement
dû code> au lieu de
devrait code> dans assertions.
Comme Michael a dit, vous pouvez utiliser Matchers de Scalatest . Assurez-vous simplement d'étendre Matchers Code>
dans votre classe de test. Ils peuvent très bien remplacer les fonctionnalités du hamcrest, tirer des caractéristiques Scala et regarder plus naturellement à Scala pour moi.
Ici, vous pouvez comparer des correspondants HamCrest et Scalatest sur quelques exemples: P>
val x = "abc" val y = 3 val list = new util.ArrayList(asList("x", "y", "z")) val map = Map("k" -> "v") // equality assertThat(x, is("abc")) // Hamcrest x shouldBe "abc" // ScalaTest // nullity assertThat(x, is(notNullValue())) x should not be null // string matching assertThat(x, startsWith("a")) x should startWith("a") x should fullyMatch regex "^a..$" // regex, no native support in Hamcrest AFAIK // type check assertThat("a", is(instanceOf[String](classOf[String]))) x shouldBe a [String] // collection size assertThat(list, hasSize(3)) list should have size 3 // collection contents assertThat(list, contains("x", "y", "z")) list should contain theSameElementsInOrderAs Seq("x", "y", "z") // map contents map should contain("k" -> "v") // no native support in Hamcrest // combining matchers assertThat(y, both(greaterThan(1)).and(not(lessThan(3)))) y should (be > (1) and not be <(3))
Je ne peux pas parler pour cette question particulière, mais: dans mon expérience générale, je trouve que les bibliothèques Java visant à fournir une expressivité sont généralement évitées par des bibliothèques Scala (ou simplement par des caractéristiques de la langue Scala).