2010-09-11 12 views
7

En mi prueba unitaria, deseo expresar que una secuencia calculada (resultado) arrojó una secuencia predefinida de valores de resultado. Pero sin asumir nada sobre el tipo de implementación real del contenedor de secuencia.ScalaTest: compruebe el contenido de una secuencia con ShouldMatcher

Y quiero deletrear mi intención bastante clara y autoexplicativa.
Si trato de usar los "ShouldMatchers" de ScalaTest y escribir

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

... cuando me siento en problemas con la simple igualdad, porque calculation(..) podría devolver un ArrayBuffer, mientras Seq("x","u") es una lista

+1

Recuerde que puede aceptar una respuesta si es correcta haciendo clic en el contorno de la casilla de verificación. –

Respuesta

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

ah gracias ... eso es bueno – Ichthyo

+0

pero en mi programa actual, todavía no tengo una dependencia en * specs * y soy reacio a agregarlo. Así que terminé implementando mi propio mezclador personalizado, que me dio exactamente la misma solución. Consulte http://www.scalatest.org/scaladoc/doc-1.2/org/scalatest/matchers/Matcher.html – Ichthyo

+0

¿Teme a las especificaciones? Es bastante excelente Abrázalo. – Synesso

4

¿Estás usando 2.7.7? En 2,8 diferente Sec de los elementos iguales (en el mismo orden) debe ser igual:

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) 

La única excepción a esta regla en 2.8 es matrices, que sólo puede ser igual a otras matrices, ya que son las matrices de Java . (Las matrices de Java no se comparan estructuralmente cuando se llaman .equals en ellas, pero ScalaTest Matchers sí hace igualdad estructural en dos matrices.)

+0

¿Qué es mejor que una respuesta del propio padre de scalatest? =) –

Cuestiones relacionadas