Server/Spring Boot
[Springboot] 통합 테스트 코드 작성해보기 (Controller)
hoonylab
2025. 4. 21. 15:48
728x90
반응형
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
반응형