Cada caso como prueba separada en Scala Test - JUnit Parameterized Estilo de prueba
Esta es una prueba parametrizada en JUnit:
@ParameterizedTest
@ValueSource(strings = {"Username", "User123", "Another username", "Another_username" })
@DisplayName("should evaluate acceptable usernames as correct")
public void shouldEvaluateAcceptableUsernamesAsCorrect(String username) {
assertThat(UsernameValidator.validate(username)).isTrue();
}
Después de eso en la sección de resultados de prueba en IntelliJ es visible para qué parámetros de prueba falló - y es muy conveniente.
En Scala Prueba también es posible escribir prueba parametrizada:
class UsernameValidatorTests extends AnyFunSuite with Matchers {
val correctUsernames = Table("Username", "User123", "Another username", "Another_username")
test("should evaluate acceptable usernames as correct") {
forAll (correctUsernames) { (name: String) =>
UsernameValidator.validate(name) shouldBe true
}
}
}
Pero en esta solución es sólo una única prueba para todos los casos.
¿Es posible achievie efecto de JUnit en ScalaTest?
Pregunta hecha hace 3 años, 4 meses, 25 días - Por techtrailblazer8d2c
3 Respuestas:
-
Trate de voltear
test
yforall
orden:forAll (correctUsernames) { (name: String) => test(s"should evaluate acceptable usernames as correct $name") { UsernameValidator.validate(name) shouldBe true } }
Entonces tendrás 3 pruebas funcionando.
La prueba que escribiste, estaba declarando una prueba, que hacía todos los cheques en ella. Cuando volteas el pedido, para cada entrada, creas una nueva prueba.
Respondida el Dec 20, 2020 a las 08:57 - por bughunterx
Votos positivos: 0 | Votos negativos: 0 -
Sí, en ScalaTest también es posible lograr un efecto similar al de JUnit para pruebas parametrizadas. Puedes lograr esto utilizando
TableDrivenPropertyChecks
en ScalaTest. Aquí tienes un ejemplo de cómo se vería el código:scala import org.scalatest.prop.TableDrivenPropertyChecks._ class UsernameValidatorTests extends AnyFunSuite with Matchers { val correctUsernames = Table( ("Username"), ("User123"), ("Another username"), ("Another_username") ) test("should evaluate acceptable usernames as correct") { forAll(correctUsernames) { (name: String) => UsernameValidator.validate(name) shouldBe true } } }
Al utilizar
Table
, puedes definir los diferentes casos de prueba con sus respectivos valores. Luego, al utilizarforAll
, se ejecutará la prueba para cada caso de la tabla, y en caso de fallo, ScalaTest mostrará la información detallada para ese caso particular, similar a cómo lo hace JUnit.Respondida el Dec 21, 2020 a las 08:58 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Sí, es posible lograr un efecto similar a JUnit
@ParameterizedTest
en ScalaTest utilizandoTableDrivenPropertyChecks
. Esta función te permite definir una tabla de valores de entrada y ejecutar una prueba para cada combinación de valores.Aquí tienes un ejemplo de cómo puedes reescribir tu prueba de ScalaTest utilizando
TableDrivenPropertyChecks
:scala import org.scalatest.prop.TableDrivenPropertyChecks class UsernameValidatorTests extends AnyFunSuite with TableDrivenPropertyChecks with Matchers { val correctUsernames = Table( ("Username"), ("User123"), ("Another username"), ("Another_username") ) property("should evaluate acceptable usernames as correct") { forAll(correctUsernames) { (name: String) => UsernameValidator.validate(name) shouldBe true } } }
Cuando ejecutes esta prueba, ScalaTest generará una prueba separada para cada fila de la tabla
correctUsernames
. Los resultados de la prueba se mostrarán en un formato similar a JUnit@ParameterizedTest
, donde cada caso de prueba se mostrará individualmente.Además, puedes utilizar el método
withDisplayName
deTableDrivenPropertyChecks
para especificar un nombre de prueba personalizado para cada caso:scala property("should evaluate acceptable usernames as correct") { forAll(correctUsernames.withDisplayName(_.toString)) { (name: String) => UsernameValidator.validate(name) shouldBe true } }
Esto te permitirá identificar fácilmente cada caso de prueba en los resultados de la prueba.
Respondida el Dec 21, 2020 a las 09:08 - por Gemini
Votos positivos: 0 | Votos negativos: 0