상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - JUnit에서 REST API를 테스트하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
JUnit에서 REST API를 테스트하는 방법은 여러 가지 접근법이 있으며, 주로 다음과 같은 단계와 도구들을 활용합니다. JUnit 자체는 테스트 프레임워크로, REST API를 호출하고 응답을 검증하는 기능은 제공하지 않지만, 이를 보완하기 위해 여러 라이브러리 및 <a href='https://sangseek.com/sangseeks/방법론/ko'>방법론</a>이 쓰입니다. 1. 단위 테스트 vs 통합 테스트 구분하기 - *단위 테스트(Unit Test)*: 컨트롤러나 서비스 레이어 내부 로직만 테스트하고 외부 REST 호출은 모킹(Mock) 처리 - *통합 테스트(Integration Test)*: 실제 REST API를 호출하여 시스템 전체 작동 여부를 확인 2. MockMvc (스프링 프레임워크 환경에서) 스프링을 사용하고 있다면 `MockMvc` 클래스를 이용해 웹 애플리케이션 컨텍스트 없이도 컨트롤러 계층에 대해 REST API 호출을 시뮬레이션할 수 있다. 주요 특징: - 서버를 띄우지 않고도 REST 엔드포인트를 호출 가능 - HTTP 메서드(GET, POST 등) 호출, 요청 바디(json 등) 전달, 응답 상태 및 내용 검증 지원 - 예시 코드: ```java @Autowired private MockMvc mockMvc; @Test public void testGetUser() throws Exception { mockMvc.perform(get("/api/users/1")) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.username").value("testuser")); } ``` 이는 내장된 Mock 환경에서 REST 호출을 흉내 내는 것이므로 빠르고 효율적이다. 3. RestTemplate 또는 WebTestClient (실제 서버 대상 테스트) - `RestTemplate` (스프링 5 이전)이나 `WebTestClient` (Spring WebFlux에서 도입) 등을 사용해 실제로 서버가 띄워져 있는 상태를 대상으로 REST API를 호출한다. - 보통 `@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)`와 함께 사용해 실제 웹 서버 환경에서 통합 테스트를 수행한다. - 예시: ```java @LocalServerPort private int port; private String baseUrl; @BeforeEach void setUp() { baseUrl = "http://localhost:" + port; } @Autowired private TestRestTemplate restTemplate; @Test public void testCreateUser() { User user = new User("testuser", "test@example.com"); ResponseEntity<User> response = restTemplate.postForEntity(baseUrl + "/api/users", user, User.class); assertEquals(HttpStatus.CREATED, response.getStatusCode()); assertEquals("testuser", response.getBody().getUsername()); } ``` - 이 방식은 실제 네트워크 요청을 발생시키므로, 테스트가 느릴 수 있지만 실제 환경과 유사한 테스트가 가능하다. 4. 외부 라이브러리 활용 (RestAssured 등) - `RestAssured`는 간결한 문법으로 REST API 테스트를 작성할 수 있도록 도와준다. - JUnit 테스트 내에서 실제 HTTP 요청을 보내고 응답 상태, 내용 등을 쉽게 검증할 수 있다. - 예시: ```java import static io.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; @Test public void testGetUsers() { given() .baseUri("http://localhost") .port(port) .when() .get("/api/users") .then() .statusCode(200) .body("size()", greaterThan(0)); } ``` 5. 테스트 데이터 준비 및 청소 - API 테스트 시 일관된 결과를 위해 <a href='https://sangseek.com/sangseeks/테스트 실행/ko'>테스트 실행</a> 전후에 DB 초기화 혹은 Mock 데이터 등록이 중요하다. - JUnit의 `@BeforeEach`, `@AfterEach` 또는 `@BeforeAll`, `@AfterAll`을 적절히 사용하여 데이터 세트를 관리한다. 6. 검증 요소 - HTTP <a href='https://sangseek.com/sangseeks/상태 코드/ko'>상태 코드</a> (200 OK, 404 Not Found 등) - 응답 헤더 (Content-Type 등) - 응답 바디 내용 (JSON 필드 값, 배열 크기 등) - 예외 발생 여부 및 메시지 7. 실행 자동화 및 지속적 통합 연계 - Maven, Gradle 등의 빌드 도구에서 JUnit 테스트가 실행되도록 설정한다. - Jenkins, GitHub Actions 등 CI/CD 파이프라인에 통합하여 코드 변경 시마다 API 테스트가 수행되도록 한다. --- 요약 - 스프링 환경에서는 `MockMvc`를 이용한 컨트롤러 계층 테스트가 효율적이며 빠름 - 실제 서버를 띄워 통합 테스트를 하려면 `@SpringBootTest`와 `TestRestTemplate` 혹은 `WebTestClient` 활용 - 더 다양한 REST API 테스트 기능을 원하면 RestAssured 같은 외부 라이브러리 사용 가능 - 테스트 환경 구축 시 데이터 상태 초기화와 응답 검증을 철저히 하여 신뢰성 확보 이와 같은 방법으로 JUnit을 기반으로 REST API에 대한 다양한 층위의 테스트를 설계하고 수행할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기