테스트를 진행하던 도중, 엔티티 더미 데이터를 생성할 필요가 생겼다.
그러나, 이를 생성하는것도 일이었다.
그러던 도중, 데이터 생성에 도움을 주는 FixtureMonkey를 알게 되었고, 간단하게 사용해보는 시간을 가져보았다.
예시 코드를 통해 사용하는 방법을 간접적으로 소개해보는 시간을 가져본다.
@Test
void test() {
// given
FixtureMonkey fixtureMonkey = FixtureMonkey.create();
// when
Animal actual = fixtureMonkey.giveMeOne(Animal.class);
// then
System.out.println(actual);
}
BeanArbitraryIntrospectorFieldReflectionArbitraryIntrospectorConstructorPropertiesArbitraryIntrospector@ConstructorProperties 어노테이션을 달아줘야 함record면 됨lombok.anyConstructor.addConstructorProperties=true 을 설정해주면 됨BuilderArbitraryIntrospector@Builder 를 통해 생성 가능FailoverArbitraryIntrospector@Test
void test() {
// given
FixtureMonkey fixtureMonkey = FixtureMonkey.create();
// when
Animal actual = fixtureMonkey.giveMeOne(Animal.class);
// then
System.out.println(actual);
}// 임의 Integer 생성
Integer number = FixtureMonkey.create().giveMeOne(Integer.class);
// 100 이상 임의 Integer 생성
Integer number2 = FixtureMonkey.create().giveMeBuilder(Integer.class)
.set(Arbitraries.integers().greaterOrEqual(100)).sample();FixtureMonkey fixtureMonkey = FixtureMonkey.builder()
.objectIntrospector(FieldReflectionArbitraryIntrospector.INSTANCE)
.build();
// 임의 객체 생성
List<Sample> sample = fixtureMonkey.giveMe(Sample.class, 100);
sample.forEach(System.out::println);
System.out.println("===============================");
// 임의 객체 생성
List<Sample> sample2 = fixtureMonkey.giveMeBuilder(Sample.class)
.set("age", Arbitraries.integers().between(1, 100))
.set("title", Arbitraries.strings().ofLength(10).alpha())
.sampleList(10);
sample2.forEach(System.out::println);
Sample actual = fixtureMonkey.giveMeBuilder(Sample.class)
.set("age", 1000)
.set("title", "Book")
.sample();
System.out.println(sample);
// 한글 설정
List<Sample> sample3 = fixtureMonkey.giveMeBuilder(Sample.class)
.set("age", Arbitraries.integers().between(1, 100))
.set("title", Arbitraries.strings().ofLength(10).withCharRange((char) 0xAC00,
(char) 0xD7A3))
.sampleList(10);
sample3.forEach(System.out::println);
// 배열에 들어간 값만 랜덤으로 배정
char[] chars = {'가', '나', '다', '라', '마'};
List<Sample> sample4 = fixtureMonkey.giveMeBuilder(Sample.class)
.set("age", Arbitraries.integers().between(1, 100))
.set("title", Arbitraries.strings().ofLength(10).withChars(chars))
.sampleList(10);
sample4.forEach(System.out::println);@BeforeEach
public void setup(){
fixtureMonkey = FixtureMonkey.builder()
.plugin(new JakartaValidationPlugin())
.objectIntrospector(FieldReflectionArbitraryIntrospector.INSTANCE)
.build();
}
@Test
public void relationalTest(){
List<User> users = fixtureMonkey.giveMeBuilder(User.class)
.setNotNull("*")
.set("password", Arbitraries.strings().withCharRange('a', 'z').ofLength(10))
.sampleList(1000);
userRepository.saveAll(users);
List<Card> cards = fixtureMonkey.giveMeBuilder(Card.class)
.setNotNull("*")
.setNull("comments")
.set("user", Arbitraries.of(users))
.sampleList(30);
cardRepository.saveAll(cards);
cards.forEach(System.out::println);
}testImplementation으로 추가해두기