9

Hamcrest使えて便利JUnitでした。今、私は使用するつもりですScalaTest。使用できることはわかっていますHamcrestが、本当に使用すべきかどうか疑問に思っています。ScalaTest同様の機能を提供していませんか? その目的のための他の Scala ライブラリ (マッチャー) はありますか?

人々はHamcrestと一緒に使いScalaTestますか?

4

3 に答える 3

4

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 パターン マッチングを使用したり、コンパイルできるもの/できないものをアサートしたり...)

于 2015-08-22T14:39:11.470 に答える
3

Scalatest には組み込みのマッチャーがあります。また、expectを使用します。場合によっては、マッチャーよりも簡潔で柔軟です (ただし、マクロを使用するため、少なくとも 2.10 バージョンの Scala が必要です)。

于 2013-07-14T05:24:22.533 に答える
1

いいえ、ScalaTest では Hamcrest は必要ありません。ShouldMatchersorMustMatchersトレイトを Specに混ぜるだけです。MustShouldマッチャーの違いは、アサーションではmustなく単に使用することです。should

例:

class SampleFlatSpec extends FlatSpec with ShouldMatchers {
     // tests
}
于 2014-02-19T22:04:00.440 に答える