Skip to content

DataSource PostreSQL QueryDSL Repository 테스트 작성 가이드

LEE YOUNG WOO edited this page Dec 7, 2022 · 1 revision

아래 문서의 내용을 베이스로 하여 추가적인 내용에 대해 기술합니다. 먼저 아래 문서를 살펴보기를 권장합니다.

예제 코드

@DataJpaTest(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Repository.class))
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("tc")
@Testcontainers
@ExtendWith(DataSourcePostgresTestSupportExtension.class)
@ContextConfiguration(classes = {
        JpaConfiguration.class,
        QueryDslConfiguration.class,
        UserQueryDslRepository.class,
        UserRepository.class
})
@EnableAutoConfiguration
class UserQueryDslRepositoryTest {
    @Autowired
    private UserQueryDslRepository userQueryDslRepository;

    @Autowired
    private UserRepository userRepository;

    @DisplayName("유저 목록 조회 - contains '길' 3건 조회")
    @Test
    void getUserListBySearchingName() {
        //given
        User user1 = User.builder()
                .userId("user1")
                .name("홍길동")
                .password("1234")
                .build();
        userRepository.save(user1);

        User user2 = User.builder()
                .userId("user2")
                .name("스티브")
                .password("1234")
                .build();
        userRepository.save(user2);

        User user3 = User.builder()
                .userId("user3")
                .name("박길동")
                .password("1234")
                .build();
        userRepository.save(user3);

        User user4 = User.builder()
                .userId("user4")
                .name("문무길")
                .password("1234")
                .build();
        userRepository.save(user4);

        //when
        List<User> userList = userQueryDslRepository.getUserListBySearchingName("길");

        //then
        assertThat(userList.size()).isEqualTo(3);
        assertThat(userList.contains(user1)).isTrue();
        assertThat(userList.contains(user3)).isTrue();
        assertThat(userList.contains(user4)).isTrue();
    }
}

@DataJpaTest(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Repository.class))

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

@ActiveProfiles("tc")

profile을 ‘tc’ 로 지정하여 테스트를 수행합니다.

@TestContainers

이 어노테이션이 지정되면 testcontainers 구성요소가 초기화 됩니다.

@ExtendWith(DataSourcePostgresTestSupportExtension.class)

테스트를 수행하는데 필요한 처리를 담당하는 extension 클래스인 DataSourcePostgresTestSupportExtension 을 적용합니다. 테스트 케이스를 수행할 때마다 실행해야 하는 코드의 자동화를 담당합니다.

@ContextConfiguration(classes = {JpaConfiguration.class, QueryDslConfiguration.class, ‘테스트대상Repository’.class})

프로젝트 구성에 맞추어 JpaConfiguration , QueryDslConfiguration 클래스 (src/main/java 내의 @Configuration 클래스) 와 테스트 대상이 되는 Repository 구현 클래스를 지정해야 합니다. 위의 예제 코드에서는 UserQueryDslRepository 를 테스트 하는 경우에 대한 코드 입니다.

@EnableAutoConfiguration

@ContextConfiguration 에서 지정한 클래스들에 대한 구성을 자동화합니다.