토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

스프링 부트 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.

목차


12.15. Testing

스프링 부트에는 공통으로 필요한 테스트 의존성을 제공하는 전용 스타터뿐 아니라, 테스트 유틸리티와 지원 클래스들이 다양하게 들어있다. 이번 섹션에선 테스트 방법과 관련해 많이 묻는 질문들에 답해보겠다.

12.15.1. Testing With Spring Security

스프링 시큐리티는 테스트를 특정 사용자로 실행할 수 있게 해준다. 예를 들어 아래 코드에 있는 테스트는 ADMIN role을 가진 인증된 사용자로 실행된다:

@WebMvcTest(UserController.class)
class MySecurityTests {

    @Autowired
    private MockMvc mvc;

    @Test
    @WithMockUser(roles = "ADMIN")
    void requestProtectedUrlWithUser() throws Exception {
        this.mvc.perform(get("/"));
    }

}

스프링 시큐리티는 스프링 MVC Test와 종합적으로 통합할 수 있으며, @WebMvcTest 슬라이스와 MockMvc를 사용해 컨트롤러를 테스트할 때도 스프링 시큐리티를 활용할 수 있다.

스프링 시큐리티에서 지원하는 테스크 기능들은 스프링 시큐리티의 레퍼런스 문서를 참고해라.

12.15.2. Use Testcontainers for Integration Testing

Testcontainers 라이브러리는 도커 컨테이너 안에서 실행하는 서비스들을 관리해준다. JUnit과 통합할 수 있어서, 작성한 테스트를 실행하기 전에 컨테이너를 실행하도록 만들 수 있다. Testcontainers는 MySQL, MongoDB, Cassandra 등과 같은 실제 백엔드 서비스와 통신하는 통합 테스트를 작성할 때 특히 유용하다. 스프링 부트 테스트에선 다음과 같이 Testcontainers를 사용하면 된다:

@SpringBootTest
@Testcontainers
class MyIntegrationTests {

    @Container
    static Neo4jContainer<?> neo4j = new Neo4jContainer<>("neo4j:4.2");

    @Test
    void myTest() {
        // ...
    }

}

여기 있는 테스트를 실행하기 전엔 Neo4j를 실행하는 도커 컨테이너가 (로컬에서 Docker를 실행 중이라면) 기동된다. 대부분의 경우 애플리케이션에 컨테이너 IP나 포트같은 실행 중인 컨테이너에 대한 세부 정보를 설정해줘야 한다.

이때는 스태틱 메소드에 @DynamicPropertySource를 선언해서 스프링 Environment에 동적으로 프로퍼티를 추가해주면 된다.

@SpringBootTest
@Testcontainers
class MyIntegrationTests {

    @Container
    static Neo4jContainer<?> neo4j = new Neo4jContainer<>("neo4j:4.2");

    @Test
    void myTest() {
        // ...
    }

    @DynamicPropertySource
    static void neo4jProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.neo4j.uri", neo4j::getBoltUrl);
    }

}

이렇게 설정해주면 애플리케이션에 있는 Neo4j 관련 빈들은 Testcontainers가 관리하는 도커 컨테이너 내에서 실행 중인 Neo4j와 통신할 수 있다.


전체 목차는 여기에 있습니다.

<< >>

TOP