scala - ScalaTest - ¿cómo comprobar que todos los elementos de la secuencia coincidan con el predicado?

CorePress2024-01-25  7

¿Existe alguna manera de mostrar mejor el mensaje de error? Por ejemplo, debajo del código

it should "check that items satisfy predicate" in {
  List(1,2,3,4,5,6).forall(x => x < 5) should equal (true)
}

solo me da el siguiente error sin ninguna descripción:

"falso no es igual a verdadero"

El predicado no sólo puede ser la expresión mínima, sino cualquier otra función. Al menos encontré https://www.scalatest.org/user_guide/using_matchers#inspectorShorthands.



------------------------------------

no sólo puede ser la expresión mínima, sino cualquier otra función

Usando el inspector try

forAll (xs) { x => assert(pred(x)) }

donde pred: T => Booleano, que genera un mensaje de error informativo con un índice y un predicado fallidos, algo así como

- should check that items satisfy predicate *** FAILED ***
  forAll failed, because: 
    at index 4, pred(x) was false (HelloSpec.scala:41) 
  in List(1, 2, 3, 4, 5, 6) (HelloSpec.scala:41)



------------------------------------

  List(1,2,3,4,5,6).foreach { _ should be < 5 }

4

1

No lo probé, pero ¿estás seguro de que se analiza? De alguna manera tengo la sensación de que debería ser < 5, como en este ejemplo sobre beWithinTolerance. valor(_) método(debería) valor(ser) método(<) valor(5); de lo contrario, las invocaciones de métodos y los valores no se alternan.

-Andréi Tyukin

28/03/2021 a las 13:53

1

@AndreyTyukin sí, tienes razón... Nunca sé de qué manera se compilará en cada caso particular, solo tengo que probar uno y ver :)

-Dima

28/03/2021 a las 13:59

He actualizado el comentariot: En realidad, es bastante fácil de detectar, porque todos esos Scala-edsl de los primeros días siempre tienen la estructura de expresión Nombre del método expresión Nombre del método expresión, etc. No "recordaba" cualquier cosa sobre debería ser o debería ser, acabo de comprobar si se alterna o no.

-Andréi Tyukin

28/03/2021 a las 14:01

Sí... todavía tengo que recordar que debería ser un método, y ser s no... mientras que deberíaBe todavía lo es :D

-Dima

28/03/2021 a las 14:11



------------------------------------

Puedes cambiar la pregunta desde

"comprobar que los elementos cumplan el predicado"

a

"comprueba que todos los elementos de la lista sean menores de 5"

y entonces la respuesta es más significativa.

Si quieres una respuesta más significativa, puedes llamar a fallar, como

fail("I've got a bad feeling about this.")

También puedes utilizar aserciones de muchas maneras; lee esto para obtener más información. Ejemplo:

assume(database.isAvailable, "The database was down again")

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare