Kotest Reflective Arbs

JVM에서 테스트를 실행할 때 Kotest는 더 복잡한 Arb를 자동으로 생성하는 기능을 지원한다.

Reflective Arbs

JVM에서 테스트를 실행할 때 Kotest는 더 복잡한 Arb를 자동으로 생성하는 기능을 지원한다. 생성된 Arb는 빌트인 기본 및 추가 반영 Arb를 사용하여 클래스 매개변수를 채운다. 생성 및 인스턴스화만 필요하고 필터링이 필요하지 않은 경우 checkAll/forAll 호출에서 클래스 유형을 직접 사용할 수 있다. 추가 조작이나 유효하지 않은 값을 필터링하기 위해 Arb를 가져오고자 하는 경우 유형 인수와 함께 Arb.bind를 사용하여 Arb를 가져올 수 있다. 필요한 유형이 기본적으로 지원되지 않는 유형에 의존하는 경우 Arb.bind를 호출할 때 해당 유형에 대한 Arb를 제공할 수 있다.

예시:

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
  }
}

반사 바인딩이 지원된다:

  • 프라이빗이 아닌 클래스 또는 데이터클래스, 기본 생성자가 프라이빗이 아니며 생성자 매개변수도 지원되는 유형인 경우
  • Pair, 1과 2가 이 범주에 속하는 경우
  • 프리미티브
  • 열거형
  • 봉인된 클래스, 서브타입 및 그 기본 생성자는 비공개가 아니어야 힌다.
  • java.timeLocalDate, LocalDateTime, LocalTime, Period, Instant
  • BigDecimal, BigInteger
  • 컬렉션(Set, List, Map)
  • 제공된 Arbs를 통해 Arb가 제공된 클래스

참조




최종 수정 : 2024-04-14