Skip to content

R2DBC PostgreSQL Repository 테스트 작성 가이드

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

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

테스트 흐름

2

예제 코드

@DataR2dbcTest
@ActiveProfiles("tc")
@Testcontainers
@ExtendWith(R2dbcPostgreSQLTestSupportExtension.class)
@ContextConfiguration(classes = {
        FlywayConfiguration.class,
        UserR2dbcRepository.class})
@EnableAutoConfiguration
class UserR2dbcRepositoryTest {
    @Autowired
    private UserR2dbcRepository userR2dbcRepository;
    
    @Test
    void getAllUsers() {
        //given
        var now = LocalDateTime.now();

        var user = User.builder()
                .userId("user8585834")
                .password("12345")
                .name("사용자1")
                .phoneNumber("01099998888")
                .createDate(now)
                .updateDate(now)
                .build();
        userR2dbcRepository.insert(user).block();

        //when
        List<User> users = userR2dbcRepository.getAllUsers()
                .collectList().block();

        //then
        assertThat(users).isNotNull();
        assertThat(users.size()).isGreaterThanOrEqualTo(1);
    }
}

@DataR2dbcTest

R2dbc 구성 요소에 대한 테스트를 수행하기 위한 어노테이션입니다. 전체 자동 구성이 비활성화 되고 Data R2dbc 테스트와 관련된 구성만 적용됩니다.

@ActiveProfiles("tc")

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

@TestContainers

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

@ExtendWith(R2dbcPostgreSQLTestSupportExtension.class)

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

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

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

@EnableAutoConfiguration

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