Spring MVC TEST 발표자료
Upcoming SlideShare
Loading in...5
×
 

Spring MVC TEST 발표자료

on

  • 1,716 views

 

Statistics

Views

Total Views
1,716
Views on SlideShare
1,716
Embed Views
0

Actions

Likes
3
Downloads
28
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Spring MVC TEST 발표자료 Spring MVC TEST 발표자료 Presentation Transcript

  • SPRING TEST MVCFRAMEWORKMVC 테스트 작성과 Test API 소개
  • SPRING MVC TEST?
  • CODE COVERAGE? View slide
  • CODE COVERAGE?REQUEST COVERAGE View slide
  • …ModuleCODE UNIT TESTMethodClass
  • SPRING MVC TESTClientRequestRequest ProcessBlack BoxRsponse
  • 실제 서버에서 SPRING MVC가요청(REQUEST)에 응답(RESPONSE)하는부분을 TEST에서 완벽히 재현
  • 실질적인 테스트를 위해서는BLACK BOX TEST가 필요
  • SPRING MVC TEST 구조Perform 요청 사전조건Expect 테스트Do 직접실행Return 반환
  • 예제 코드1 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes=AppConfig.class) @WebAppConfiguration public class ControllerTest { @Autowired WebApplicationContext wac; MockMvc mockMvc; @Before public void init() { mockMvc =MockMvcBuilders.webAppContextSetup(wac).build(); }
  • 예제코드2 @Test public void test1() throws Exception { mockMvc // 요청 시작 .perform(get("/test/") .header("x-requested-with", "XMLHttpRequest") .accept(MediaType.APPLICATION_JSON)) // 응답 테스트 시작 .andExpect(handler().handlerType(Controller.class)) .andExpect(handler().methodName("test")) // 요청과 응답에 대한 코드 실행 .andDo(MockMvcResultHandlers.print()); } }
  • 코드 설명(설정) @WebAppConfiguration // WebApplicationContext 를 가져 올 수 있도록 하는 어노테이션 @Autowired WebApplicationContext wac; MockMvc mockMvc; //생성된 mock MVC 가상서버(?)는 재활용 가능하다. @Before public void init() { mockMvc =MockMvcBuilders.webAppContextSetup(wac).build(); // Test를 위한 Spring MVC 가상(?)의 서버(가칭 MockMVC)를 사전에 생성 }
  • 예제 코드 설명(요청) mockMvc.perform(get("/test/") .header("x-requested-with", "XMLHttpRequest") .accept(MediaType.APPLICATION_JSON)) // 여기 까지 Mock MVC로 요청을 보내기 위한 사전 조건을 설정 //Header, cookie등을 설정 할 수 있다.
  • 예제 코드 설명(응답) .andExpect(handler().handlerType(Controller.class)) // 요청에대한 맵핑된 MVC컨트롤러 클래스 확인 .andExpect(handler().methodName("test")) // 요청에대한 맵핑된 MVC컨트롤러의 클래스에 속한 메소드 확인 .andDo(MockMvcResultHandlers.print()); // 헤당 요청과 응답에 대한 처리를 Logging 처리
  • 소스자체는 간결하고 이해하기 쉬운(?)DSL형태의 모양을 가지고 있다.( 물론 호불호가 갈리지만! 패스 )
  • JUnit 에서 테스트 용도로 사용하는메소드assertThat, assertEquals, asserTrue등을직접 사용하지 않고 내부적으로사용한다!
  • 도대체 어떤 테스트를 지원하는가?
  • org.springframework.test.web.servlet.result.MockMvcResultMatchers클래스 안에 다 들어가 있지만읊어보자면…
  • REQUEST TEST Request attribute test ( Attribute 정보 확인 테스트 ) .andExpect(request().attribute(.., ..)) Session attribute test ( 세션 정보 확인 테스트 ) .andExpect(request().sessionAttribute(.., ..)) Async test ( Servlet 3.0, Spring 3.2 부터 지원 하는 비동기 요청테스트 ) .andExpect(request(). asyncStarted(.., ..)) 비동기요청인가? .andExpect(request(). asyncNotStarted(.., ..)) 비동기요청이 아닌가? .andExpect(request(). asyncResult(.., ..)) 비동기 요청에 대한 응답 정보는?
  • HANDLER TEST Handler type test ( 요청에 맵핑 되는 Handler 타입을 테스트 ) .andExpect(handler().handlerType(..)) Handler method name test ( 요청에 맵핑되는 Handler 메소드명테스트 ) .andExpect(handler().methodName(..)) Handler method type test ( 요청에 맵핑되는 Handler 메소드타입테스트) .andExpect(handler().method(..))
  • MODEL TEST Model attrbute test ( Model 속성 테스트 ) .andExpect(model().attribute(..)) .andExpect(model().attributeExists(..)) .andExpect(model().attributeErrorCount(..)) .andExpect(model().attributeHasErrors(..)) .andExpect(model().attributeHasNoErrors(..)) .andExpect(model().attributeHasFieldErrors(..)) .andExpect(model().errorCount(..)) .andExpect(model().hasErrors(..)) .andExpect(model().hasNoErrors(..)) 일단 일일이 설명 보다는 메소드명에 모든 설명이 담겨있다!! ( 귀찮아서 그런거 절대아님! ) 대략 해당 Model에 들어 이는 속성에 대한 값과 Validation체크로 통한 에러 여부 등을체크한다.
  • VIEW TEST View name test ( 해당 요청에 선택된 View name 테스트 ) .andExpect(view().name(..))
  • HTTP STATUS, HEADER TEST Status test ( 응답 상태에 대한 테스트 ) .andExpect(status().is(..)) 응답상태 코드에 대한 테스트 ( 200:정상 … ) org.springframework.http HttpStatus 참조 Error message test ( 에러메세지에 대한 테스트 ) .andExpect(status().reason(..)) 메세지 문자열 등 테스트 한다. Header test ( 헤더 정보에 대한 테스트 ) .andExpect(header().string(..)) .andExpect(header().longValue(..))
  • RESPONSE CONTENT TEST ContentType test( contentType 테스트 ) .andExpect(content().contentType(..)) .andExpect(content().contentTypeCompatibleWith(..)) Encoding test ( content 문자열 인코딩 테스트 ) .andExpect(content().encoding(..)) Content test ( content 테스트 ) .andExpect(content().string(..)) : content 문자열 비교 .andExpect(content().bytes(..)) : content byte 비교 .andExpect(content().xml(..)) : content xml dom 비교 .andExpect(content().node(..)) : content xml dom node 비교 .andExpect(content().source(..)) : content xml dom source 객체 비교
  • OTHER TEST Forwarded url test( 포워딩 URL 테스트 ) .andExpect(forwardedUrl(..)) Redirected url test ( 리다이렉트 URL 테스트 ) .andExpect(redirectedUrl(..)) Flash attribute test ( Spring 3.1 부터 지원 되는 Flash attribute값테스트 ) .andExpect(flash().attribute(..)) : attribute 테스트 .andExpect(flash(). attributeExists(..)) : attribute 존재 여부 테스트 .andExpect(flash(). attributeCount(..)) : attribute의 수 테스트
  • 계속 됩니다.