JUnit
と一緒に使うのが便利なHamcrest
が見つかりました。今度はScalaTest
を使用します。私はHamcrest
を使うことができると知っていますが、私は本当にがになるはずです。 ScalaTest
は同様の機能を提供していませんか?その目的のために他のScalaライブラリ(matcher)がありますか?HamCrestとScalaTest
Hamcrest
にはScalaTest
を使用していますか?
JUnit
と一緒に使うのが便利なHamcrest
が見つかりました。今度はScalaTest
を使用します。私はHamcrest
を使うことができると知っていますが、私は本当にがになるはずです。 ScalaTest
は同様の機能を提供していませんか?その目的のために他のScalaライブラリ(matcher)がありますか?HamCrestとScalaTest
Hamcrest
にはScalaTest
を使用していますか?
いいえ、ScalaTestでHamcrestは必要ありません。スペックでShouldMatchers
またはMustMatchers
形質を混ぜるだけです。 Must
とShould
マッチャーの違いは、アサーションでshould
の代わりにmust
を単に使用することです。
例:マイケルが言ったように
class SampleFlatSpec extends FlatSpec with ShouldMatchers {
// tests
}
、あなたはScalaTest's matchersを使用することができます。テストクラスでMatchers
を延長してください。彼らはHamcrestの機能を非常によく置き換えることができ、Scalaの機能を活用して、Scalaの中でもっと自然に見えます。ここで
、あなたは比較することができHamcrestとScalaTestは、いくつかの例にマッチャー:
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))
...と、より多くのあなたが(例えばScalaのパターンマッチングを使用して、/コンパイルすることはできませんどのような主張ScalaTestで行うことができます、...)
私はこの特定の質問について話すことはできませんが、私の経験では、表現力を提供することを目的としたJavaライブラリは通常、Scalaライブラリ(または単にScala言語機能)によって取り除かれています。 –