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 |
---|
댓글