통합테스트란?
통합테스트는 소프트웨어 개발의 여러 단계 중 하나로, 개별적으로 개발된 모듈들을 결합하여 전체 시스템이나 애플리케이션의 일부가 제대로 작동하는지 검증하는 테스트입니다. 이는 단위 테스트가 개별 컴포넌트 또는 클래스의 기능을 검증하는 반면, 통합테스트는 여러 컴포넌트나 시스템의 상호작용을 검증하여 오류를 찾아내고, 전체 시스템이 요구사항을 만족하는지 확인합니다.
Spring Boot와 SpringBootTest
Spring Boot는 Spring 기반의 애플리케이션을 쉽고 빠르게 구축할 수 있도록 도와주는 도구로, 다양한 'starter'종속성과 자동 구성(Auto-configuration) 기능을제공합니다. @SpringBootTest는 Spring Boot에서 제공하는 어노테이션 중 하나로, 실제 애플리케이션 컨텍스트를 로드하여 더 넓은 범위에서 통합 테스트를 수행할 수 있게 돕습니다.
SpringBootTest의 작동 방식
@SpringBootTest는 테스트 중인 애플리케이션의 전체 컨텍스트를 로드하며, 필요한 모든 컴포넌트가 스프링 빈으로 등록되어 상호작용하게 합니다. 이 어노테이션은 테스트 시 실제로 구동될 수 있는 환경을 제공하믈, 애플리케이션의 설정, 스프링 프로파일, 환경 변수 등을 실제 운영 환경과 유사하게 설정할 수 있습니다.
통합테스트 예시: SpringBootTest활용
다음은 Spring Boot에서 @SpringBootTest를 활용한 간단한 웹 애플리케이션 통합 테스트 예시입니다. 이 예제는 REST 컨트롤러의 엔드 포인트를 테스트하고, 전체 애플리케이션 컨텍스트를 로드하여 HTTP 요청과 응답을 검증합니다.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) // 실제 서브릿 환경을 모의하여 테스트
public class UserControllerIntergrationTest{
@Autowired
private TestRestTemplate restTEmplate; // REST 요청을 보낼 수 있는 템플릿
@public void testUserEndpoints(){
//REST API 호출
ResponseEntity<String> response = restTemplate.getForEntity("user/1", String.class);
// 상태 코드와 응답 본문 검증
assertAll(
() -> assertEquals(HttpStatus.OK, response.getStatusCode()),
() -> assertTrue(response.getBody().contains("user"))
);
}
}
'IT > QA' 카테고리의 다른 글
Spring Security, OAuth 적용 후 필요한 테스트? (0) | 2024.12.05 |
---|---|
Jenkins, Docker-compose로 컨테이너화 하기 (0) | 2024.12.03 |
Spring의 단위 테스트, JUnit5과 Mockito를 사용한 계층별 테스트 (0) | 2024.11.30 |
Zephyr를 이용한 테스트 관리 (1) | 2024.11.28 |
유닛 테스트 도구 Junit, Vscode에서 사용하기 (0) | 2024.11.26 |