ScalaTest: проверить содержимое последовательности с ShouldMatcher - PullRequest
6 голосов
/ 11 сентября 2010

В моем модульном тесте я хочу выразить, что вычисленная (результирующая) последовательность дала предопределенную последовательность значений результата.Но не предполагая ничего о фактическом типе реализации контейнера последовательностей.

И я хочу изложить свое намерение довольно четко и само за себя.
Если я попытаюсь использовать «ShouldMatchers» ScalaTest инапишите

val Input22 = ...
calculation(Input22) should equal (Seq("x","u"))

... тогда у меня возникнут проблемы с простым равенством, потому что calculation(..) может вернуть ArrayBuffer , тогда как Seq("x","u") - это Список

Ответы [ 2 ]

4 голосов
/ 12 сентября 2010

Вы используете 2.7.7?В 2.8 разные Seq с равными элементами (в том же порядке) должны быть равны:

scala> import org.scalatest.matchers.ShouldMatchers._
import org.scalatest.matchers.ShouldMatchers._

scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> val list = List(1, 2, 3)
list: List[Int] = List(1, 2, 3)

scala> val arrayBuffer = ArrayBuffer(1, 2, 3)
arrayBuffer: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)

scala> list == arrayBuffer
res2: Boolean = true

scala> arrayBuffer == list
res3: Boolean = true

scala> list should equal (arrayBuffer)

scala> arrayBuffer should equal (list)

Единственное исключение из этого правила в 2.8 - это массивы, которые могут быть равны только другим массивам, потому что ониJava-массивы.(Java-массивы структурно не сравниваются, когда вы вызываете .equals для них, но сопоставители ScalaTest действительно обеспечивают структурное равенство для двух массивов.)

2 голосов
/ 11 сентября 2010
import org.specs.matcher.IterableMatchers._
calculation(Input22) should beTheSameSeqAs (Seq("x","u"))
...