@SpringBootTest와 @WebMvcTest의 차이
SpringBoot Test
SpringBoot 애플리케이션의 테스트를 지원하기 위해 제공되는 테스트 모듈
SpringBoot 애플리케이션의 전체 컨텍스트를 로드하고 설정하는 것으로,
애플리케이션의 실제 구성 요소들과 상호작용하며 통합 테스트를 수행하는 데 사용한다.
SpringBoot Test의 특징
애플리케이션 컨텍스트를 로드하여 통합테스트 수행
실제 빈과 구성 요소들과 상호작용하여 실제 환경과 유사한 테스트 수행.
@SpringBootTest 어노테이션을 사용하여 테스트클래스에서 SpringBoot 애플리케이션 컨텍스트를 로드
SpringBoot Test 예시
@ActiveProfiles("test")
@SpringBootTest
class AnimalServiceTest {
@Autowired
AnimalService animalService;
@Test
@DisplayName("동물 하나를 입양하면 \"입양되었습니다.\"의 응답이 나오며 HTTP.OK를 반환한다.")
public void adoptAnimal() {
// given
AdoptRequestDto requestDto = new AdoptRequestDto(AnimalType.FOX, "미호", "female");
// when
ResponseEntity<String> response = animalService.adoptAnAnimal(requestDto);
// then
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isEqualTo("입양되었습니다.");
}
}
WebMvc Test
Spring MVC 웹 애플리케이션을 테스트하기위해 제공되는 모듈.
실제 서버를 실행하지 않고도 MVC컨트롤러와 관련된 요청과 응답을
테스트할 수 있도록 지원한다.
WebMvc Test의 특징
서버를 실행하지 않고도 컨트롤러와 관련된 HTTP 요청과 응답을 테스트할 수 있음
MockMvc를 사용하여 HTTP요청을 만들고 컨트롤러의 응답을 검증
@WebMvcTest 어노테이션을 사용하여 웹 계층 테스트에 필요한 빈들을 로드
@ActiveProfiles("test")
@ExtendWith(MockitoExtension.class)
class AnimalControllerTest {
MockMvc mockMvc;
@Mock
ObjectMapper objectMapper;
@Mock
AnimalService animalService;
@BeforeEach
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(new AnimalController(animalService)).build();
}
@Test
void adoptAnAnimal() throws Exception {
// given
AdoptRequestDto requestDto = new AdoptRequestDto(FOX, "미호", "female");
String answer = "success";
when(animalService.adoptAnAnimal(any())).thenReturn(new ResponseEntity<>(answer, HttpStatus.OK));
// when & then
mockMvc.perform(MockMvcRequestBuilders.post("/animal")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsBytes(requestDto)))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.content().string(answer))
.andDo(print());
}
}
'자바 탐구' 카테고리의 다른 글
자바) 예외 클래스 (0) | 2023.08.01 |
---|---|
자바) 오버로딩과 오버라이딩 (0) | 2023.07.31 |
스프링) RestClient (0) | 2023.07.25 |
자바) List, Set, Map, HashMap의 특성 (0) | 2023.07.24 |
스프링) 스프링 컨테이너(Spring Container) (0) | 2023.07.24 |