Spring Boot 애플리케이션에서 안정적인 코드 작성을 위해서는 테스트가 필수입니다. 이 글에서는 Spring Boot의 단위 테스트와 통합 테스트에 대해 알아보고, 각각의 테스트가 무엇인지, 어떻게 작성하는지에 대해 자세히 살펴보겠습니다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceTest {
@Autowired
private MyService myService;
@MockBean
private MyRepository myRepository;
@Test
public void testServiceMethod() {
// 테스트할 데이터 준비
MyEntity entity = new MyEntity(1L, "test name");
Mockito.when(myRepository.findById(1L)).thenReturn(Optional.of(entity));
// 테스트 실행
MyEntity result = myService.findById(1L);
// 검증
assertEquals("test name", result.getName());
}
}
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testGetRequest() throws Exception {
mockMvc.perform(get("/api/myendpoint"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("test name"));
}
}
단위 테스트
통합 테스트
단위 테스트와 통합 테스트는 각기 다른 목적과 특징을 가지고 있으며, 서로 보완적인 관계입니다. 단위 테스트는 빠르게 비즈니스 로직을 검증하는 데 유용하고, 통합 테스트는 시스템 간의 상호작용을 확인하는 데 유용합니다.