[Spring Framework] MockMVC 사용 예제 & 정리
Devel/JAVA2024. 1. 24. 15:46
반응형
Spring MVC
Spring MVC 테스트 프레임워크는 Spring MVC 애플리케이션 테스트를 지원한다.
Spring MVC 요청 처리를 수행하지만 실행 중인 서버 대신 모의 요청 및 응답 객체를 통해 수행하며,
즉, 서버 없이 Spring MVC 컨트롤러에 대한 테스트를 한다.
ContextHierychy
@ContextHierarchy통합 테스트를 위한 인스턴스 계층 구조를 정의하는 데 사용되는 클래스 수준 주석이다.
ApplicationContext. @ContextHierarchy하나 이상의 @ContextConfiguration인스턴스 목록으로 선언해야 하며,
각 인스턴스는 컨텍스트 계층 구조의 수준을 정의한다. ( @ContextHierarchy테스트 클래스 계층 내에서도 사용할 수 있음).
@ContextHierarchy({
@ContextConfiguration("/parent-config.xml"),
@ContextConfiguration("/child-config.xml")
})
class ContextHierarchyTests {
// class body...
}
Static Imports
- MockMvcBuilders.*
- MockMvcRequestBuilders.*
- MockMvcResultMatchers.*
- MockMvcResultHandlers.*
class MyWebTests{
@Autowired
private MockMvc mockMvc; // mockMvc 생성
@Test
public void testController() throws Exception{
String json_data = "{\"name\": \"부대찌개\"}";
//mockMvc에게 컨트롤러에 대한 정보를 입력하자.
mockMvc.perform(
get("test?") //해당 url로 요청
.contentType(MediaType.APPLICATION_JSON) // Json 타입으로 지정
.content(json_data) // json_data을 내용 등록
.andExpect(status().isOk()) // 응답 status를 ok로 테스트(status:200)
.andDo(print()); // 응답값 print함.
)
}
}
standaloneSetup
단위 테스트에 조금 더 가깝다. 한 번에 하나의 컨트롤러를 테스트한다.
class MyWebTests {
MockMvc mockMvc;
@BeforeEach
void setup() {
this.mockMvc = MockMvcBuilders.standaloneSetup(new AccountController()).build();
}
// ...
}
// static import of MockMvcBuilders.standaloneSetup
MockMvc mockMvc = standaloneSetup(new MusicController())
.defaultRequest(get("/").accept(MediaType.APPLICATION_JSON))
.alwaysExpect(status().isOk())
.alwaysExpect(content().contentType("application/json;charset=UTF-8"))
.build();
URI 템플릿 스타일로 쿼리 매개변수를 지정하는 경우,
mockMvc.perform(get("/hotels?thing={thing}", "somewhere"));
쿼리 또는 양식 매개변수를 나타내는 서블릿 요청 매개변수를 추가하는 경우,
mockMvc.perform(get("/hotels").param("thing", "somewhere"));
.andExpect()
andExpect는 다음 예제와 같이 요청을 수행한 후 하나 이상의 호출을 추가하여 andExpect를 정의할 수 있다.
mockMvc.perform(get("/accounts/1")).andExpect(status().isOk());
.
andExpectAll()
.andExpectAll(...)의 경우 아래와 같이 요청을 수행한 후 추가하여 여러 기대치를 정의할 수 있다.
// static import of MockMvcRequestBuilders.* and MockMvcResultMatchers.*
mockMvc.perform(get("/accounts/1")).andExpectAll(
status().isOk(),
content().contentType("application/json;charset=UTF-8"));
.andReturn()
MvcResult mvcResult = mockMvc.perform(post("/persons"))
.andExpect(status().isOk()).andReturn();
.Filter()
인스턴스를 설정할 때 다음 예제와 같이 MockMvc하나 이상의 서블릿 인스턴스를 등록할 수 있다.
mockMvc = standaloneSetup(new PersonController())
.addFilters(new CharacterEncodingFilter()).build();
'Devel > JAVA' 카테고리의 다른 글
[JAVA] Enum이란? 특징 및 예시코드 (1) | 2024.02.03 |
---|---|
[Java] DAO, DTO, VO의 설명 및 예시 (0) | 2024.02.02 |
JAVA 17 설치하는 방법 (0) | 2023.11.15 |
JAVA 자바 for문을 이용한 실습예제(짝수만, 홀수짝수합,구구단,*쌓기) (0) | 2020.08.31 |
JAVA 자바 if문, swith문, break,continue 개념정리와 실습예제 (0) | 2020.08.31 |
댓글()