2013-07-14 8 views
6

Я нашел Hamcrest удобный для использования с JUnit. Теперь я собираюсь использовать ScalaTest. Я знаю, что могу использовать Hamcrest, но мне интересно, действительно ли я должен. Не поддерживает ли ScalaTest аналогичную функциональность? Есть ли другая библиотека Scala для этой цели?Hamcrest и ScalaTest

Используют ли люди Hamcrest с ScalaTest?

+1

Я не могу говорить по этому конкретному вопросу, но: В моем общем опыте я обнаружил, что библиотеки Java, направленные на обеспечение выразительности, обычно устраняются библиотеками Scala (или просто языковыми функциями Scala). –

ответ

3

Scalatest имеет встроенный matchers. Также мы используем expecty. В некоторых случаях он более краткий и гибкий, чем помощники (но он использует макросы, поэтому для него требуется не менее 2.10 версии Scala).

1

Нет, вам не нужен Hamcrest с ScalaTest. Просто перемешайте в знаке ShouldMatchers или MustMatchers с вашим Spec. Разница между Must исовпадениями вы просто используете must вместо should в утверждениях.

Пример:

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

Как сказал Майкл, вы можете использовать ScalaTest's matchers. Просто убедитесь, что вы расширяете Matchers в своем тестовом классе. Они могут очень хорошо заменить функциональность Hamcrest, использовать функции Scala и выглядеть более естественными в Scala для меня.

Здесь вы можете сравнить Hamcrest и ScalaTest matchers на нескольких примерах:

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 сопоставления с образцом, утверждают, что может/не может скомпилировать , ...)

Смежные вопросы