Instancio: 단위 테스트용 데이터 생성기
createBookDTO()
메서드에서 수행됩니다.참고: 끝에 제공된 소스 코드에 대한 링크.
// Class under test
private final BookMapper bookMapper = new BookMapper();
@Test
void map() {
// Given
BookDTO bookDto = createBookDTO();
// When
Book book = bookMapper.toEntity(bookDto);
// Then
assertThat(book.getTitle()).isEqualTo(bookDto.getBookTitle());
// ... snip ... remaining assertions
}
// Data setup
private BookDTO createBookDTO() {
AuthorDTO authorDto = new AuthorDTO();
authorDto.setAuthorId(UUID.randomUUID().toString());
authorDto.setFirstName("Jane");
authorDto.setLastName("Doe");
BookDTO bookDto = new BookDTO();
bookDto.setBookId(UUID.randomUUID().toString());
bookDto.setIsbn("test-isbn");
bookDto.setBookTitle("test-title");
bookDto.setAuthor(authorDto);
bookDto.setGenre(Genre.FICTION);
bookDto.setPublishedOn(LocalDate.of(1865, 3, 17));
bookDto.setNumberOfPages(123);
bookDto.setPriceCents(3099);
return bookDto;
}
createBookDTO()
에서 수행된 설정은 단위 테스트에 매우 일반적입니다. 그러나 특히 대규모 클래스를 처리할 때 상당히 지루할 수 있습니다. 게다가 가치 자체는 실제로 중요하지 않은 경우가 많습니다. 이름을 "Jane Doe"
로 설정하든 "Foo Bar"
로 설정하든 상관 없습니다. 최종 결과는 동일합니다.값이 중요하지 않다면 라이브러리를 사용하여 임의의 데이터로 개체를 생성하고 채우는 것은 어떻습니까? 이것이 바로 Instancio가 하는 일입니다. 단위 테스트를 위한 객체를 생성하는 라이브러리입니다. Instancio를 사용하여 다음과 같이
BookDTO
인스턴스를 생성할 수 있습니다.private BookDTO createBookDTO() {
return Instancio.create(BookDTO.class);
}
이것은 올바른 방향으로 나아가는 단계처럼 보이지만
BookDTO
의 일부 값을 사용자 지정해야 하는 경우에는 어떻게 해야 합니까? 테스트 중인 BookMapper
클래스가 문자열 UUID 값을 UUID
유형으로 변환한다고 가정해 보겠습니다.UUID.fromString(bookId) // need a valid UUID string!
이 경우 테스트 개체에 유효한 ID가 포함되어 있지 않으면 테스트가 실패합니다(원래
setAuthorId()
메서드의 setBookId()
및 createBookDTO()
가 모두 UUID.randomUUID().toString()
로 설정됨). 이를 달성하기 위해 Instancio의 빌더 API를 사용하여 사용자 정의 값을 설정할 수 있습니다.Instancio.of(BookDTO.class)
.set(field(BookDTO.class, "bookId"), UUID.randomUUID().toString())
.set(field(AuthorDTO.class, "authorId"), UUID.randomUUID().toString())
.create();
이 간단한 테스트의 경우 위의 변경으로 충분하며 이제 테스트를 통과합니다. 그러나 Instancio는 생성된 개체를 사용자 지정하기 위한 여러 다른 기능을 지원합니다. 예를 들면 다음과 같습니다.
Instancio.of(BookDTO.class)
.generate(field("genre"), gen -> gen.oneOf(Genre.CRIME, Genre.SCIFI, Genre.FANTASY))
.generate(field("isbn"), gen -> gen.text().pattern("#d-#d#d#d#d#d-#d#d#d-#d"))
.generate(field("numberOfPages"), gen -> gen.ints().range(100, 999))
.create();
더 자세히 설명하는 후속 기사가 있을 수 있습니다. 더 많은 예제를 보고 싶거나 질문이 있는 경우 의견을 남겨주세요. 모든 피드백을 환영합니다!
자세한 내용을 알아보려면 여러 예제가 있는 user guide을 참조하십시오.
book-mapper-sample
프로젝트는 https://github.com/instancio/instancio-samples에서 찾을 수 있습니다.연결
Reference
이 문제에 관하여(Instancio: 단위 테스트용 데이터 생성기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/armandino/data-generator-for-unit-tests-4nab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)