2010-09-11 3 views
7

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

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

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

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

+1

Помните, что вы можете принять ответ, если он правильный, щелкнув по блоку. –

ответ

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

ah спасибо ... это хорошо – Ichthyo

+0

, но в моей текущей программе у меня нет зависимости от * specs *, но я не хочу ее добавлять. Таким образом, я закончил тем, что реализовал собственный пользовательский матчи, который дал мне точно такое же решение. См. Http://www.scalatest.org/scaladoc/doc-1.2/org/scalatest/matchers/Matcher.html – Ichthyo

+0

Вы боитесь спецификаций? Это отлично. Прими это. – Synesso

4

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

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 выполняют структурное равенство на двух массивах.)

+0

Что лучше, чем ответ от самого отца скалята? знак равно –