でHamcrest
使えて便利JUnit
でした。今、私は使用するつもりですScalaTest
。使用できることはわかっていますHamcrest
が、本当に使用すべきかどうか疑問に思っています。ScalaTest
同様の機能を提供していませんか? その目的のための他の Scala ライブラリ (マッチャー) はありますか?
人々はHamcrest
と一緒に使いScalaTest
ますか?
でHamcrest
使えて便利JUnit
でした。今、私は使用するつもりですScalaTest
。使用できることはわかっていますHamcrest
が、本当に使用すべきかどうか疑問に思っています。ScalaTest
同様の機能を提供していませんか? その目的のための他の Scala ライブラリ (マッチャー) はありますか?
人々はHamcrest
と一緒に使いScalaTest
ますか?
Michael が言ったように、ScalaTest の 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))
...そして、ScalaTest でできることは他にもたくさんあります (たとえば、Scala パターン マッチングを使用したり、コンパイルできるもの/できないものをアサートしたり...)
いいえ、ScalaTest では Hamcrest は必要ありません。ShouldMatchers
orMustMatchers
トレイトを Specに混ぜるだけです。Must
とShould
マッチャーの違いは、アサーションではmust
なく単に使用することです。should
例:
class SampleFlatSpec extends FlatSpec with ShouldMatchers {
// tests
}