-
[Springboot] 통합 테스트 코드 작성해보기 (Controller)Server/Spring Boot 2025. 4. 21. 15:48728x90반응형
Spring Boot Controller 통합 테스트 (JUnit 5 + MockMvc)
이번에는 UserService를 사용하는 UserController에 대한 통합 테스트 예제를 알아봅니다. Spring Boot의
@SpringBootTest
와MockMvc
를 활용하여 실제 HTTP 요청/응답 시나리오를 검증할 수 있습니다.1. 컨트롤러 클래스 (UserController.java)
@RestController @RequestMapping("/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @PostMapping public ResponseEntity<User> createUser(@RequestBody User user) { User saved = userService.createUser(user.getName(), user.getEmail()); return ResponseEntity.ok(saved); } @GetMapping("/{email}") public ResponseEntity<User> getUserByEmail(@PathVariable String email) { return userService.getUserByEmail(email) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); } }
2. 통합 테스트 클래스 (UserControllerIntegrationTest.java)
@SpringBootTest @AutoConfigureMockMvc class UserControllerIntegrationTest { @Autowired private MockMvc mockMvc; @Autowired private UserRepository userRepository; @BeforeEach void setup() { userRepository.deleteAll(); } @Test void testCreateUser() throws Exception { String json = """ { "name": "Charlie", "email": "charlie@example.com" } """; mockMvc.perform(post("/users") .contentType(MediaType.APPLICATION_JSON) .content(json)) .andExpect(status().isOk()) .andExpect(jsonPath("$.name").value("Charlie")) .andExpect(jsonPath("$.email").value("charlie@example.com")); } @Test void testGetUserByEmail() throws Exception { userRepository.save(new User(null, "Dana", "dana@example.com")); mockMvc.perform(get("/users/dana@example.com")) .andExpect(status().isOk()) .andExpect(jsonPath("$.name").value("Dana")) .andExpect(jsonPath("$.email").value("dana@example.com")); } }
마무리
위와 같이
MockMvc
를 활용하면, 컨트롤러 레이어의 HTTP API를 실제처럼 테스트할 수 있습니다. 통합 테스트는 각 계층이 잘 연결되어 있는지 확인하는 데 중요한 역할을 하며, 특히 REST API 테스트에 매우 유용합니다.728x90반응형'Server > Spring Boot' 카테고리의 다른 글
[Springboot] 인증(Authentication)과 인가(Authorization) 구분하기! (0) 2025.04.21 [Springboot] SQL Injection 이란? 해결 방안은? (0) 2025.04.21 [Springboot] 단위 테스트 코드 작성해보기 (Service, Dao, Repository) (0) 2025.04.21 [Springboot] 테스트도구 JUnit5 에 대해 알아보자! (0) 2025.04.21 [Springboot] 스레드와 프로세스를 구분해보자! (0) 2025.04.18