테스트 코드 작성에 활용하기 위해 랜덤 값 생성과 관련된 라이브러리를 찾아보다 Java Faker 를 찾게 되었다.
다만, Java Faker은 다양한 언어의 정해진 형식 , 예를 들어 주소나 이름 등의 데이터를 생성해주는 것에 강점이 있는 라이브러리이기에 테스트 코드보다는 더미 데이터를 생성하는 과정에서 더 효과적으로 사용할 수 있을 것같다.
해당 라이브러리가 워낙 방대해 모든 것을 정리할 순 없지만, 자주 사용할 법한 것들을 위주로 작성하였다.
사용법이 정말 직관적이라 않아 굳이 공식 문서를 보지 않고도 사용할 수는 있겠지만, 필요할 경우 공식 문서를 찾아보자.
// Gradle
implementation 'com.github.javafaker:javafaker:1.0.2'
최신 업데이트가 2020년을 마지막으로 이어지지 않고 있기에 새로운 버전이 추가될 일이 있을까 싶긴 하지만, 필요하다면 아래 링크에서 최신 버전을 확인해보자.
https://mvnrepository.com/artifact/com.github.javafaker/javafaker
Faker 선언
Faker faker = new Faker();
랜덤한 알파벳 생성. 물음표의 갯수 만큼의 랜덤한 알파벳이 생성됨.
ex)
??? → abc
????? → abcde
String a = faker.letterify("?????");
물음표가 아닌 다른 문자는 그대로 출력되기에 , 아래와 같이 설정하면 “ex:” 라는 문자는 고정한채, 랜덤한 알파벳을 생성할 수도 있음
String a = faker.letterify("ex:?????");
랜덤한 숫자 생성. #의 갯수 만큼의 랜덤한 숫자가 생성됨.
위와 동일한 원리로 # 외의 다른 값들은 고정됨으로 이를 활용할 수 있음
String b = faker.numerify("####");
랜덤한 알파벳과 숫자를 동시에 생성
String c = faker.bothify("????####");
지정된 정규식 패턴에 맞는 문자열 생성
“[ ]” 에 생성할 문자를 , “{ }” 에 생성할 갯수를 작성하면된다.
# 10자리 영어만
String d = faker.regexify("[a-z]{10}");
# 10자리 영어와 숫자
String d = faker.regexify("[a-z0-9]{10}");
# 10자리 한국어만
String d = faker.regexify("[가-힣]{10}");
# 10자리 한국어와 일본어
String d = faker.regexify("[가-힣ぁ-んァ-ン]{10}");
이전 선언했던 Faker의 기본 설정은 영어이기에, 아래 코드에서 한국어나 다른 언어의 값을 생성하고 싶을 경우 아래와 같이 추가적적인 코드가 필요하다
# 한국어 설정
Faker faker = new Faker(new Locale("ko"));
랜덤 풀네임 생성 ( ex. 홍길동 )
String f = faker.name().fullName();
랜덤 이름 생성 ( ex. 길동 )
String f = faker.name().firstName();
랜덤 성 생성 ( ex. 홍 )
String f = faker.name().lastName();
랜덤 주소 생성
String g = faker.address().streetAddress();
랜덤 회사 이름 생성
String g = faker.company().name();
랜덤 전화번호 생성
String h = faker.phoneNumber().phoneNumber();
랜덤 이메일 생성
단, 위처럼 한국어로 설정했을 경우 홍길동@gmail.com 과 같이 생성된다는 점 유의
String h = faker.internet().emailAddress();
무작위 날짜 생성
Date j = faker.date().birthday();
무작위 단어 생성
String k = faker.lorem().word();
무작위 문장 생성
Stirng l = faker.lorem().sentence();
무작위 문단 생성
String m = faker.lorem().paragraph();
무작위 문자열 생성
맨 뒤 숫자를 조정하여 생성되는 문자열의 길이를 조정 할 수 있음
단, 영어로만 생성됨
faker.lorem().characters(10)