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.time
의LocalDate
,LocalDateTime
,LocalTime
,Period
,Instant
BigDecimal
,BigInteger
- 컬렉션(
Set
,List
,Map
) - 제공된 Arbs를 통해 Arb가 제공된 클래스
참조
최종 수정 : 2024-04-14