6

私の単体テストでは、計算された (結果) シーケンスが結果値の事前定義されたシーケンスを生成したことを表現したいと思います。ただし、シーケンス コンテナーの実際の実装タイプについては何も想定していません。

そして、私は自分の意図をはっきりと自明に説明したいと思います。
ScalaTest の「ShouldMatchers」を使用して記述しようとすると、

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

...次に、 ArrayBuffercalculation(..)返す可能性があるため、単純な等式で問題が発生しますが、リストですSeq("x","u")

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 でのこの規則の 1 つの例外は配列です。配列は Java 配列であるため、他の配列とのみ等しい場合があります。(Java 配列は、それらに対して .equals を呼び出すと構造的に比較されませんが、ScalaTest マッチャーは 2 つの配列に対して構造的同等性を行います。)

于 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 に答える