Web/spring-boot
Fixture Monkey로 테스트에서 객체를 자동으로 생성해보자
부에나온다
2024. 2. 13. 10:08
Fixture Monkey 란?
- 2023년 11월 10일 네이버의 오픈소스 픽스쳐 몽키가 정식 릴리즈 되었습니다.
- 픽스쳐 몽키는 코틀린, 자바에서 테스트 객체를 자동으로 생성하는 라이브러리 입니다.
- 테스트용 객체를 만드는데 생성자나, Builder 패턴을 사용하여 번거럽고 시간이 많이 걸리는 일을 줄여 간결하고 생산성있는 테스트코드를 작성하는데 도움을 줍니다.
- https://github.com/naver/fixture-monkey?tab=readme-ov-file
Maven 의존성 추가
<dependency>
<groupId>com.navercorp.fixturemonkey</groupId>
<artifactId>fixture-monkey-starter</artifactId>
<version>1.0.0</version>
<scope>test</scope>
</dependency>
사용방법
- Lombok 을 사용할 경우
- 롬복으로 생성자를 만들 경우 ConstructorPropertiesArbitraryIntrospector을 사용해야 합니다.
@Test
void test() {
// given
FixtureMonkey fixtureMonkey = FixtureMonkey.builder()
.objectIntrospector(ConstructorPropertiesArbitraryIntrospector.INSTANCE)
.build();
// when
User actual = fixtureMonkey.giveMeOne(User.class);
// then
then(actual).isNotNull();
}
- Lombok 을 사용하지 않을 경우
@Test
void test() {
// given
FixtureMonkey fixtureMonkey = FixtureMonkey.create();
// when
User actual = fixtureMonkey.giveMeOne(User.class);
// then
then(actual).isNotNull();
}
이렇게 해서 객체를 만들경우 해당 객체의 필드값은 랜덤하게 들어가게 됩니다.
객체 생성 Method
- giveMe()
- 기본적으로 객체가 필요한 경우 사용합니다.
- 기본적으로 랜덤한 값이 배정됩니다.
- 원하는 컬렉션 크기도 지정이 가능합니다.
List<User> userList = fixtureMonkey.giveMe(User.class, 3);
List<List<String>> strListList = fixtureMonkey.giveMe(new TypeReference<List<String>>() {}, 3);
- giveMeBuilder()
- 생성할 객체를 좀더 자세히 다뤄야하는 경우 사용
- 객체 일부 필드의 값을 랜덤값이 아닌 값으로 지정해줄 수 있다.
FixtureMonkey fixtureMonkey = FixtureMonkey.builder()
.objectIntrospector(ConstructorPropertiesArbitraryIntrospector.INSTANCE)
.build();
User actual = fixtureMonkey.giveMeBuilder(User.class)
.set(javaGetter(User::getName), "제이콥")
.minSize(javaGetter(User::getOptions), 1)
.sample();
정리
- 이렇게 간단하게 Fixture Monkey를 사용하는 방법에 대해서 알아봤습니다.
- 테스트코드의 작성하는데 소요되는 시간을 줄여주고, 가독성도 확보되는 이점이 있는거 같습니다.