@DataJpaTest
- persistence layer를 슬라이스 테스트 하기 위한 각종 자동 설정을 지원
- 복잡한 쿼리 표현을 테스트
- TestEntityManager : 테스트 데이터를 주입할 EntityManager를 사용 가능
- @AutoConfigureTestDatabase : 테스트용 인메모리 DB를 다른 환경으로 바꿀 때 사용
- @JdbcTest : Spring Data 기능 없이 DataSource만 테스트
- @DataJdbcTest : DataSource + Spring Data JDBC
@DisplayName("DB - 이벤트")
@DataJpaTest
class EventRepositoryTest {
private final EventRepository eventRepository;
// EventRepositoryTest 생성자
public EventRepositoryTest(@Autowired EventRepository eventRepository) {
this.eventRepository = eventRepository;
}
// 이벤트 뷰 데이터를 검색 파라미터와 함께 조회하면, 조건에 맞는 데이터를 페이징 처리하여 리턴한다.
@DisplayName("이벤트 뷰 데이터를 검색 파라미터와 함께 조회하면, 조건에 맞는 데이터를 페이징 처리하여 리턴한다.")
@Test
void givenSearchParams_whenFindingEventViewPage_thenReturnsEventViewResponsePage() {
// Given
// When
Page<EventViewResponse> eventPage = eventRepository.findEventViewPageBySearchParams(
"배드민턴",
"운동1",
EventStatus.OPENED,
LocalDateTime.of(2021, 1, 1, 0, 0, 0),
LocalDateTime.of(2021, 1, 2, 0, 0, 0),
PageRequest.of(0, 5)
);
// Then
assertThat(eventPage.getTotalPages()).isEqualTo(1);
assertThat(eventPage.getNumberOfElements()).isEqualTo(1);
assertThat(eventPage.getTotalElements()).isEqualTo(1);
assertThat(eventPage.getContent().get(0))
.hasFieldOrPropertyWithValue("placeName", "서울 배드민턴장")
.hasFieldOrPropertyWithValue("eventName", "운동1")
.hasFieldOrPropertyWithValue("eventStatus", EventStatus.OPENED)
.hasFieldOrPropertyWithValue("eventStartDatetime", LocalDateTime.of(2021, 1, 1, 9, 0, 0))
.hasFieldOrPropertyWithValue("eventEndDatetime", LocalDateTime.of(2021, 1, 1, 12, 0, 0));
}
// 이벤트 뷰 데이터 검색어에 따른 조회 결과가 없으면, 빈 데이터를 페이징 정보와 함께 리턴한다.
@DisplayName("이벤트 뷰 데이터 검색어에 따른 조회 결과가 없으면, 빈 데이터를 페이징 정보와 함께 리턴한다.")
@Test
void givenSearchParams_whenFindingNonexistentEventViewPage_thenReturnsEmptyEventViewResponsePage() {
// Given
// When
Page<EventViewResponse> eventPage = eventRepository.findEventViewPageBySearchParams(
"없은 장소",
"없는 이벤트",
null,
LocalDateTime.of(1000, 1, 1, 1, 1, 1),
LocalDateTime.of(1000, 1, 1, 1, 1, 0),
PageRequest.of(0, 5)
);
// Then
assertThat(eventPage).hasSize(0);
}
// 이벤트 뷰 데이터를 검색 파라미터 없이 페이징 값만 주고 조회하면, 전체 데이터를 페이징 처리하여 리턴한다.
@DisplayName("이벤트 뷰 데이터를 검색 파라미터 없이 페이징 값만 주고 조회하면, 전체 데이터를 페이징 처리하여 리턴한다.")
@Test
void givenPagingInfoOnly_whenFindingEventViewPage_thenReturnsEventViewResponsePage() {
// Given
// When
Page<EventViewResponse> eventPage = eventRepository.findEventViewPageBySearchParams(
null,
null,
null,
null,
null,
PageRequest.of(0, 5)
);
// Then
assertThat(eventPage).hasSize(5);
}
// 이벤트 뷰 데이터를 페이징 정보 없이 조회하면, 에러를 리턴한다.
@DisplayName("이벤트 뷰 데이터를 페이징 정보 없이 조회하면, 에러를 리턴한다.")
@Test
void givenNothing_whenFindingEventViewPage_thenThrowsError() {
// Given
// When
Throwable t = catchThrowable(() -> eventRepository.findEventViewPageBySearchParams(
null,
null,
null,
null,
null,
null
));
// Then
assertThat(t).isInstanceOf(InvalidDataAccessApiUsageException.class);
}
}
'개발 > Spring' 카테고리의 다른 글
Spring Security (0) | 2024.02.27 |
---|---|
Querydsl (1) | 2024.02.27 |
DataSource, TransactionManager (1) | 2024.02.27 |
Spring Data JPA 인터페이스 (0) | 2024.02.27 |
H2 Database (0) | 2024.02.26 |