2013-07-14 7 views
6

JUnitと一緒に使うのが便利なHamcrestが見つかりました。今度はScalaTestを使用します。私はHamcrestを使うことができると知っていますが、私は本当にになるはずです。 ScalaTestは同様の機能を提供していませんか?その目的のために他のScalaライブラリ(matcher)がありますか?HamCrestとScalaTest

HamcrestにはScalaTestを使用していますか?

+1

私はこの特定の質問について話すことはできませんが、私の経験では、表現力を提供することを目的としたJavaライブラリは通常、Scalaライブラリ(または単にScala言語機能)によって取り除かれています。 –

答えて

3

スカラテストはビルドインmatchersです。また、expectyを使用します。場合によっては、マッチャーよりも簡潔で柔軟性があります(しかし、マクロを使用するため、少なくとも2.10バージョンのScalaが必要です)。

1

いいえ、ScalaTestでHamcrestは必要ありません。スペックでShouldMatchersまたはMustMatchers形質を混ぜるだけです。 MustShouldマッチャーの違いは、アサーションでshouldの代わりにmustを単に使用することです。

例:マイケルが言ったように

class SampleFlatSpec extends FlatSpec with ShouldMatchers { 
    // tests 
} 
2

、あなたは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で行うことができます、...)