ScalaTest:使用ShouldMatcher检查序列的内容

时间:2010-09-11 14:10:18

标签: unit-testing scala scalatest

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

我想说明我的意图相当明确和不言自明 如果我尝试使用ScalaTest的“ShouldMatchers”并编写

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

...然后我遇到了简单的相等问题,因为calculation(..)可能返回 ArrayBuffer ,而Seq("x","u") List

2 个答案:

答案 0 :(得分: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匹配器会在两个数组上执行结构相等。)

答案 1 :(得分:2)

import org.specs.matcher.IterableMatchers._
calculation(Input22) should beTheSameSeqAs (Seq("x","u"))