전체 글에 해당하는 글 157

  1. [Spring Framework] MockMVC 사용 예제 & 정리2024.01.24
반응형

[Spring Framework] MockMVC 사용 예제 & 정리

Devel/JAVA|2024. 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();

 

 

댓글()
loading