在我的单元测试中,我想表达计算(结果)序列产生预定义的结果值序列。但是没有假设任何关于序列容器的实际实现类型。
我想说明我的意图相当明确和不言自明 如果我尝试使用ScalaTest的“ShouldMatchers”并编写
val Input22 = ...
calculation(Input22) should equal (Seq("x","u"))
...然后我遇到了简单的相等问题,因为calculation(..)
可能返回 ArrayBuffer ,而Seq("x","u")
是 List
答案 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"))