본문 바로가기
Java

Easy Random을 이용한 객체 생성

by dvid 2022. 12. 22.

Easy Random

테스트를 위해 Dummy 객체를 만들 때 굉장히 번거롭다.
그 때 도움을 받을 수 있는 Easy Random 라이브러리를 알게 되어 소개하려고 한다.

 

public class Member {

    private final Long id;
    private final String username;
    private final String email;
    private final LocalDate birthDate;
    private final LocalDateTime createdAt;


    public Member(Long id, String username, String email, LocalDate birthDate, LocalDateTime createdAt) {
        this.id = id;
        this.username = username;
        this.email = email;
        this.birthDate = birthDate;
        LocalDateTime tmp = createdAt == null ? LocalDateTime.now() : createdAt;
        this.createdAt = tmp.withNano(0);
    }

}

 

위와 같은 클래스가 있을 때 객체를 생성하기 위해서는

 

Member member = new Member(null, null, null, null, null);

 

과 같이 할 수 있지만, 하나가 아니라 값이 채워져 있는 많은 객체를 생성하기 위해서는 값을 넣기 위해 많은 노력을 해야한다.

EasyRandom을 사용하여 쉽게 객체를 만들어 보자.

의존성 추가

  • gradle
testImplementation("org.jeasy:easy-random-core:${version}")
  • maven
<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-random-core</artifactId>
    <version>${version}</version>
</dependency>

EasyRandom을 사용한 객체 생성

public static Member create() {
    LocalDateTime startDate = LocalDateTime.of(2000, 1, 1, 0, 0, 0).withNano(0);
    LocalDateTime endDate = LocalDateTime.of(2022, 12, 31, 23, 59, 59).withNano(0);

    EasyRandomParameters randomMember = new EasyRandomParameters()
        .excludeField(named("id"))
        .randomize(String.class, new StringRandomizer(10))
        .randomize(LocalDateTime.class, new LocalDateTimeRangeRandomizer(startDate, endDate));

    return new EasyRandom(randomMember).nextObject(Member.class);
}

복잡해 보이지만, 특정 클래스의 생성 범위를 제한한 뒤 객체를 생성하는 것이다.

 

id라는 이름을 가진 필드를 생성 시 제외하고,
LocalDateTime 클래스는 startDate, endDate 사이의 값으로 생성이 된다.
또한 String 클래스는 길이가 1 ~ 10 으로 제한된다.

 

이런식으로 특정 클래스의 범위를 제한한 뒤 객체를 생성해준다.

@Test
void test() {
    for (int i = 0; i < 10; i++) {
        Member member = create();
        System.out.println(member);
    }
}

 

위의 결과를 출력하면

 

Member(id=null, username=cMFnP, email=pMIzUE, birthDate=2024-06-18, createdAt=2003-02-15T15:36:39)
Member(id=null, username=aIKzr, email=LSJscedS, birthDate=2024-06-18, createdAt=2008-05-22T21:03:33)
Member(id=null, username=lldN, email=mdMTxLk, birthDate=2024-06-18, createdAt=2011-06-17T12:12:36)
Member(id=null, username=BsYbBPR, email=Ef, birthDate=2024-06-18, createdAt=2022-01-05T13:23:50)
Member(id=null, username=QDrprL, email=onCzEOw, birthDate=2024-06-18, createdAt=2021-06-15T21:13)
Member(id=null, username=JHsEazZR, email=IapJfdxs, birthDate=2024-06-18, createdAt=2009-02-04T18:08:47)
Member(id=null, username=gGUWN, email=MLGwqzzXX, birthDate=2024-06-18, createdAt=2011-09-06T23:19:56)
Member(id=null, username=PmEpRtj, email=EuBaehT, birthDate=2024-06-18, createdAt=2006-01-22T20:35:50)
Member(id=null, username=qwpAJXMk, email=APfry, birthDate=2024-06-18, createdAt=2004-04-14T02:51:06)
Member(id=null, username=gJ, email=kwnWSH, birthDate=2024-06-18, createdAt=2001-04-07T19:09:28)

위와 같이 생성된다.

객체 생성시에는 Reflection을 사용한다고 한다.

참조

'Java' 카테고리의 다른 글

클래스 로더, 클래스 로딩  (0) 2023.03.01

댓글