6

在我的单元测试中,我想表达一个计算(结果)序列产生了一个预定义的结果值序列。但无需假设任何关于序列容器的实际实现类型。

我想清楚地说明我的意图,不言自明。
如果我尝试使用 ScalaTest 的“ShouldMatchers”并编写

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

...然后我遇到了简单相等的麻烦,因为calculation(..)可能返回一个ArrayBufferSeq("x","u")而是一个List

4

2 回答 2

4

您使用的是 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 数组。(当您对它们调用 .equals 时,Java 数组不会在结构上进行比较,但 ScalaTest 匹配器确实会在两个数组上进行结构相等。)

于 2010-09-12T03:27:38.900 回答
2
import org.specs.matcher.IterableMatchers._
calculation(Input22) should beTheSameSeqAs (Seq("x","u"))
于 2010-09-11T15:29:40.487 回答