피드로 돌아가기
올리브영 테크블로그Backend
원문 읽기
TestFixture를 쉽게 생성해 주는 라이브러리가 있다?
올리브영 파트너오피스 스쿼드가 FixtureMonkey 라이브러리 도입으로 테스트 Fixture 자동 생성 및 500개 이상의 테스트 코드 작성 시간 단축
AI 요약
Context
테스트 코드 작성 시 Test Data Builder, Object Mother 패턴, JSON 파일 기반 Fixture 방식을 사용하면서 API 수정 시 테스트 코드 동기화 어려움, 개발자가 예상하지 못한 엣지 케이스 누락, 복잡한 테스트 객체 구성으로 인한 코드 복잡도 증가 문제가 발생했다.
Technical Solution
- FixtureMonkey 라이브러리 도입: 2023.11.10 정식 1.0.0 버전을 사용하여 Java & Kotlin에서 재사용 가능한 테스트 Fixture 자동 생성
- Bean Validation 1.0(JSR-303), Bean Validation 2.0(JSR-380) 표준 어노테이션 활용: 전용 어노테이션 추가 없이 기존 Validation 어노테이션으로 객체 생성 규칙 정의
- 동적 객체 생성 설정: FixtureMonkey.create()를 통해 임의의 값으로 객체 생성, giveMeBuilder() 메서드로 특정 필드 값 고정 또는 Arbitraries를 사용해 범위 제약 적용
- ArbitraryBuilder 재사용 패턴: fixName() 같은 공통 Builder 함수를 작성해 set() 메서드로 필드 값을 선택적으로 오버라이드하여 중복 코드 제거
- ObjectIntrospector 커스터마이징: FieldReflectionArbitraryIntrospector, BeanArbitraryIntrospector, BuilderArbitraryIntrospector를 Failover 방식으로 조합하여 다양한 객체 생성 방식 지원
Impact
파트너오피스 스쿼드에서 약 500개 이상의 테스트 코드를 FixtureMonkey를 사용하여 작성했으며, 테스트에 필요한 관심 필드들을 명시적으로 표현하여 Fixture 생성 시간을 단축할 수 있었다.
Key Takeaway
테스트 Fixture 자동 생성 라이브러리를 도입하면 명시적 필드 설정으로 코드 가독성을 높이면서 동시에 랜덤 데이터 생성을 통해 개발자가 미처 발견하지 못한 엣지 케이스를 효과적으로 검증할 수 있다.
실천 포인트
Bean Validation 어노테이션을 이미 사용 중인 Java/Kotlin 프로젝트에서 FixtureMonkey의 giveMeBuilder() + set() 메서드 조합으로 테스트 케이스별 필드 값을 선택적으로 제어하면, 동일한 기본 객체 구조를 재사용하면서도 구체적인 테스트 시나리오에 맞춘 Fixture를 간결하게 작성할 수 있다.