MockMVC
내장 Tomcat을 생략한 테스트
서블릿을 Mocking한 것이 구동
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class SampleControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void hello() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("hello"))
.andDo(print());
}
}
MockMVC를 주입받는 방법
@SpringBootTest + @AutoConfigureMockMvc 애노테이션
통합테스트시 사용
필요한 모든 의존성을 자동으로 입력해준다.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@WebMvcTest 애노테이션
MVC 쪽만 Slice 테스트시
필요한 의존성을 직접 넣어야한다.
@RunWith(SpringRunner.class)
@WebMvcTest
public class MyControllerTest {
@Autowired
private MockMvc mockMvc;
RANDOM_PORT
내장 Tomcat을 포함한 테스트
사용 가능한 포트를 자동으로 구동
WebFlux 테스트
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) // 내장 톰캣 사용
class UserControllerTest {
@Autowired
WebTestClient webTestClient; // Webflux에 추가된 RestClient 비동기 동작을함.
@Test
public void test() throws Exception{
webTestClient.get().uri("/api/user/list")
.exchange()
.expectStatus().isOk() // response 상태값 정상 여부
.expectHeader()
.contentType(MediaType.APPLICATION_JSON)// Header contentType 확인
.expectBodyList(User.class) // Response의 타입이 User.class 확인
.hasSize(8) // Response List 사이즈가 8개 확인
.returnResult() // Response로 부터 결과 획득
.getResponseBody(); // User.class로 변환된 결과 반환
}
}
'SpringFramework > JUnit Test' 카테고리의 다른 글
SpringBoot JUnit5 의존성 설정 (0) | 2020.11.24 |
---|---|
Spring Seurity 적용시 테스트 방안 (0) | 2020.06.10 |
Assert 함수 (0) | 2020.06.10 |
관련 어노테이션 (0) | 2020.06.10 |
JUnit4로 변경 (0) | 2020.06.10 |