Ir al contenido principal
Versión: 5.7.x

Arbs Reflexivos

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

Al ejecutar pruebas en JVM, Kotest permite generar automáticamente Arbs más complejos. El Arb generado utiliza Arbs predeterminados integrados y otros reflexivos para rellenar los parámetros de la clase. Si solo necesitas crear una instancia y no requieres filtrado, puedes usar directamente el tipo de clase en las llamadas checkAll/forAll. Cuando desees obtener el Arb para manipularlo más o filtrar valores no válidos, puedes usar Arb.bind con el argumento de tipo para obtener el Arb. Si el tipo requerido depende de tipos no soportados por defecto, es posible proporcionar Arbs para esos tipos en la llamada a Arb.bind.

Ejemplo:

enum class Currency {
USD, GBP, EUR
}

class CurrencyAmount(
val amount: Long,
val currency: Currency
)

context("Currencies converts to EUR") { // In some spec
checkAll(Arb.bind<CurrencyAmount>().filter { it.currency != EUR }) { currencyAmount ->
val converted = currencyAmount.convertTo(EUR)
converted.currency shouldBe EUR
}
}

context("Converting to a currency and back yields the same amount") { // In some spec
checkAll<CurrencyAmount, Currency>() { currencyAmount, currency ->
val converted = currencyAmount.convertTo(currency).convertTo(currencyAmount.currency)
converted.currency shouldBe currencyAmount.currency
}
}

El enlace reflexivo es compatible con:

  • Clases o data classes no privadas, cuyo constructor principal no sea privado y cuyos parámetros sean tipos soportados

  • Pair, donde tanto el primer como el segundo elemento cumplen con esta categoría

  • Tipos primitivos

  • Enums

  • Clases selladas (sealed classes), donde los subtipos y su constructor principal no deben ser privados

  • LocalDate, LocalDateTime, LocalTime, Period, Instant de java.time

  • BigDecimal, BigInteger

  • Colecciones (Set, List, Map)

  • Clases para las que se haya proporcionado un Arb mediante providedArbs