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).