본문으로 건너뛰기
버전: v1.2.x

v1.2.x

v1.2.1

Features

  • object-farm-api (0.1.30.1.4): InlinedValueResolverFieldExtractor#reflection(InlinedValueResolver) 오버로드를 추가했습니다. JVM 언어 플러그인이 해당 언어가 소유 객체의 필드에 인라인한 value 타입을 복원할 수 있습니다.

Improvements

  • JvmTypeSystem(EXPERIMENTAL)이 assemblyPlanner(AssemblyPlanner) 대신 플러그인이 제공하는 개별 부품 — nodePromoters(...), leafTypeResolvers(...), candidateGeneratorWrapper(...), inlinedValueResolver(...) — 을 받습니다. 모든 플러그인이 적용된 후 FixtureMonkeyBuilder가 이 부품들로 단일 AssemblyPlanner를 생성합니다. 그 결과 JvmTypeSystemPlugin을 여러 개 등록하면 각 플러그인이 등록한 항목이 합쳐집니다. 이전에는 마지막 플러그인이 앞선 등록을 덮어썼습니다.

Bug Fixes

  • Kotlin value class 프로퍼티를 가진 객체를 통째로 set(...)에 넘길 때 발생하던 IllegalArgumentException을 수정했습니다. kotlin.time.Duration, UInt처럼 언어가 소유 객체의 필드에 인라인하는 모든 타입에 동일하게 적용되며, PropertyNameResolver로 이름이 바뀐 프로퍼티(예: Jackson의 @JsonProperty)도 함께 처리됩니다.

v1.2.0

0.4.0부터 기본 엔진이었던 레거시 object tree 엔진이 제거되고, 1.1.17에서 실험적으로 도입되었던 adapter 엔진이 이제 유일한 기본 객체 생성 엔진이 되었습니다. FixtureMonkeyBuilder가 자동으로 연결합니다. 일상적으로 사용하는 API(ArbitraryBuilder, giveMe*, set/size/thenApply)는 변경되지 않았습니다. 기존 엔진 내부에 연결되던 확장 지점은 제거되었으므로 Breaking Changes를 확인하세요. 커스텀 Property / PropertyGenerator / ArbitraryIntrospector를 직접 구현한 경우 이번 릴리스를 주의 깊게 검토하세요.

Features

  • JVM 언어용 확장 SPI인 JvmTypeSystemPlugin / JvmTypeSystem / LeafTypeRegistry를 추가했습니다. 플러그인이 FixtureMonkeyBuilder.plugin(...)을 통해 커스텀 AssemblyPlanner를 설치할 수 있습니다.
  • 값 생성 디버깅을 위해 resolution tracer를 직접 연결하는 FixtureMonkeyBuilder#tracer(AssemblyTracer)를 추가했습니다.
  • TypeReference#getJvmType()ArbitraryGeneratorContext#getResolvedJvmType()를 추가했습니다.
  • Types#normalizeRawType(...), Types#toJvmType(...) 오버로드, Types#toAnnotatedType(JvmType) 유틸리티를 추가했습니다.

Improvements

  • @SeedFixtureMonkeyBuilder#seed(long)보다 우선 적용되며, seed가 테스트 단위로 스코프되고 해제됩니다. 테스트나 다른 extension이 예외를 던져도 해제됩니다. 이전에는 global seed가 테스트 간에 누수되거나 builder의 기본값(System.nanoTime())에 의해 덮어써질 수 있었습니다.
  • 컨테이너 크기가 같은 seed로 재실행 시 재현 가능해졌습니다. 컨테이너 크기 randomness가 값 생성과 분리된 전용 counter로 추적되어, 다른 곳의 cache hit/miss 패턴이 크기에 영향을 주지 않습니다.
  • 객체 생성이 선언/iteration 순서를 유지합니다(HashMap 대신 LinkedHashMap). Kotlin aliased constructor 파라미터에 값이 잘못된 파라미터로 들어가던 문제를 수정합니다. 이로 인해 같은 seed에서도 생성되는 random stream이 1.1.x와 달라질 수 있습니다.
  • FixtureMonkeyOptionsBuilder#defaultNullInjectGeneratorOperator(...)가 이전 operator를 덮어쓰지 않고 연속으로 합성(compose)합니다.
  • .size()의 wildcard와 exact-path 우선순위가 빌드 시점에 결정되어, 우선순위가 높은 wildcard 크기가 가려진 exact path에도 올바르게 적용됩니다.

Bug Fixes

  • primitive 타입 슬롯에 null을 주입하려다 발생하던 IllegalArgumentException을 방지합니다.
  • null이 주입될 path에 postCondition/filter 술어(predicate)가 등록된 경우 발생하던 NullPointerException을 방지합니다.
  • anonymous-interface proxy로 해석되는 self-referential 인터페이스 프로퍼티에서 발생하던 StackOverflowError를 방지합니다.
  • 재귀/self-referential 컨테이너 타입(예: List<Self>를 포함하는 타입)이 생성 불가능한 child를 만들던 문제를 수정합니다.
  • Kotlin Pair/Triple 같은 커스텀 컨테이너 타입을 올바르게 인식합니다.
  • 중첩 타입에 대해 per-type introspector chain(예: PriorityConstructorArbitraryIntrospector)이 잘못된 PropertyGenerator를 사용하던 문제를 수정합니다.

Deprecations

  • ArbitraryGeneratorContext#getResolvedType()#getResolvedAnnotatedType()를 deprecated 처리했습니다. #getResolvedJvmType()를 사용하세요.
  • PropertyUtils#toProperty(AnnotatedType)를 deprecated 처리했습니다. 새 toProperty(JvmType) 오버로드를 사용하세요.

Breaking Changes

  • Property 인터페이스: getType() 제거(getJvmType() 사용), getAnnotatedType() 제거, getValue(Object) 제거(값 추출은 더 이상 Property 계약의 일부가 아닙니다). 이에 따라 내장 구현체(FieldProperty, ConstructorProperty, RootProperty, MapEntryElementProperty 등)의 생성자 시그니처가 변경되었습니다.
  • ArbitraryGeneratorContext#getResolvedType()의 반환 타입이 java.lang.reflect.Type에서 Class<?>로 변경되었습니다.
  • ContainerPropertyGenerator.DEFAULT_ELEMENT_RAW_TYPE를 제거했습니다. DEFAULT_ELEMENT_JVM_TYPE를 사용하세요.
  • 레거시 생성 엔진을 제거했습니다: c.n.f.tree.* 패키지, c.n.f.expression.*(ArbitraryExpression, MonkeyExpression, MonkeyExpressionFactory), manipulator 패밀리(NodeManipulator, ArbitraryManipulator, ContainerInfoManipulator 등)와 NodeResolver SPI. 이제 AssemblyPlanner가 자동으로 사용됩니다.
  • 1.1.17에서 추가된 실험적 adapter-bridge SPI를 제거했습니다: NodeTreeAdapter, DefaultNodeTreeAdapter, JavaNodeTreeAdapterPlugin, Kotlin의 KotlinNodeTreeAdapterPlugin. 자동으로 동작하는 AssemblyPlanner + JvmTypeSystemPlugin으로 대체되었습니다.
  • FixtureMonkeyOptionsBuilder#nodeTreeAdapter(...) / #adapterTracer(...)와 대응하는 FixtureMonkeyOptions getter를 제거했습니다. FixtureMonkeyBuilder#tracer(AssemblyTracer)를 사용하세요.
  • object-farm-api (0.1.20.1.3): JavaType 클래스를 제거했습니다(ReflectiveJvmType 사용). deprecated였던 JvmType#getAnnotatedType()도 제거했습니다.