공식 문서
https://naver.github.io/fixture-monkey/v1-0-0-kor/
테스트 코드를 작성하다보면 객체, 보통 엔티티에 무작위한 값을 넣고 이를 테스트해야하는 경우가 많다.
다만 이러한 과정을 위해 시간을 소요하고 동일한 과정을 반복하는 것이 번거롭기에 이를 간단하게 해결 하기 위해 나온 것이 Fixture Monkey이다.
사용법은 정말 간단하다.
의존성
// Gradle
testRuntimeOnly("org.junit.platform:junit-platform-launcher:{version}")
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-starter:1.0.23")
// Maven
<dependency>
<groupId>com.navercorp.fixturemonkey</groupId>
<artifactId>fixture-monkey-starter</artifactId>
<version>1.0.23
</version>
<scope>test</scope>
</dependency>
엔티티 내부에 @Setter 이 추가가 되어있다면 아래와 같은 코드 두 줄로 랜덤한 값이 생성된다.
// Member.class 부분은, 본인이 생성하고 싶은 클래스로 변경
void test () {
FixtureMonkey fixtureMonkey = FixtureMonkey.create();
Member member = fixtureMonkey.giveMeOne(Member.class);
}
다만, 엔티티에 @Setter을 사용하는 것은 추천하는 방식은 아니기에 보통은 아래와 같이 값을 생성하곤 한다.
FixtureMonkey fixtureMonkey = FixtureMonkey.builder()
.objectIntrospector(FieldReflectionArbitraryIntrospector.INSTANCE)
.build();
Member member = fixtureMonkey.giveMeOne(Member.class);
FixtureMonkey에서는 몇 가지의 생성 전략이 존재하는데,
아무 것도 설정하지 않았을 경우에는 기본 생성자와 @Setter 이 존재하여야 하며,
ConstructorPropertiesArbitraryIntrospector → 클래스가 record이거나 적용할 생성자에 @ConstructorProperties 가 존재해야함
BuilderArbitraryIntrospector → @Builder 가 존재해야함
FieldReflectionArbitraryIntrospector → 기본 생성자 존재해야함
이번 예시 코드같은 경우 엔티티에
@NoArgsConstructor 가 존재하기에 FieldReflectionArbitraryIntrospector를 사용했지만, 필요에 따라 상황에 따라 맞춰서 사용하면 된다.
만약, 특정 값은 랜덤이 아닌 임의로 지정하고 싶다면 .set() 을 이용해 아래와 같이 입력하면 된다.
Member member = fixtureMonkey.giveMeBuilder(Member.class)
.set("변경하고 싶은 필드", "변경하고 싶은 값")
.set("email", "test@naver.com")
.set("deletedAt", null)
.sample();
'Springboot' 카테고리의 다른 글
Exception Handler ( 커스텀 익셉션 ) 사용 이유 및 작성 방법 (0) | 2024.11.25 |
---|---|
fixtureMonkey, JakartaValidationPlugin 제약 조건 설정 (0) | 2024.10.06 |
스프링부트 Repository TestCode ( 테스트 코드 / mybatis ) (0) | 2024.09.25 |
스프링부트 Repository 커스텀 (분리) (0) | 2024.09.23 |
Springboot 실행과 동시에 종료 오류 해결 (0) | 2024.09.04 |