스프링 부트 공식 레퍼런스를 한글로 번역한 문서입니다.
전체 목차는 여기에 있습니다.
목차
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와 통신할 수 있다.
Next :Build
빌드와 관련된 how to 가이드 (빌드 시점에 빌드/깃 정보 생성하기, 의존성 버전 커스텀하기, jar/war 파일 빌드하기 등)
전체 목차는 여기에 있습니다.