naver / fixture-monkey

Let Fixture Monkey generate test instances including edge cases automatically
https://naver.github.io/fixture-monkey
Apache License 2.0
575 stars 90 forks source link

[Kotlin] Primary Constructor에 포함되지 않는 프로퍼티 초기화 하는 방법 #1009

Closed jayyhkwon closed 4 weeks ago

jayyhkwon commented 4 months ago

안녕하세요, 우선 좋은 라이브러리 제공해주셔서 감사드린다는 인사 먼저 드립니다 ( __ ) 덕분에 테스트 작성 시 생산성이 많이 증가하였습니다!

다름이 아니라. Primary Contsturctor에 포함되지 않는 프로퍼티의 경우 항상 null로 초기화 됩니다. PrimaryConstructorArbitraryIntrospector에 의해 생성자에 존재하는 필드만 조작해서 그런걸로 추측되는데요.

data class TestObject(
  val a: String?,
  val b: Long?
) {
  var c: String? = null // 항상 null
}

해당 클래스 뿐만 아니라, 글로벌하게 생성자에 포함되지 않는 필드도 초기화 할 수 있는 방법을 가이드 받을 수 있을까요??

seongahjo commented 4 months ago

@jayyhkwon 안녕하세요! 아래와 같이 코틀린 기본 생성 방법인 PrimaryConstructorArbitraryIntrospector.INSTANCEKotlinPropertyArbitraryIntrospector.INSTANCE를 섞어서 사용하시면 생성자에 포함하지 않은 필드도 초기화할 수 있습니다.

val fixture = FixtureMonkey.builder()
            .plugin(KotlinPlugin())
            .objectIntrospector(
                CompositeArbitraryIntrospector(
                    listOf(
                        PrimaryConstructorArbitraryIntrospector.INSTANCE,
                        KotlinPropertyArbitraryIntrospector.INSTANCE
                    )
                )
            )
            .build()

혹시 이슈 있으시면 편하게 말씀해주세요.

감사합니다.

jayyhkwon commented 4 weeks ago

안녕하세요! @seongahjo 답변 확인이 늦었네요. 말씀하신 방법대로 적용해서 잘 사용 중입니다~! 가이드 주셔서 감사 드립니다!