Spring MVC TEST 발표자료

  • 1,056 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,056
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
29
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. SPRING TEST MVCFRAMEWORKMVC 테스트 작성과 Test API 소개
  • 2. SPRING MVC TEST?
  • 3. CODE COVERAGE?
  • 4. CODE COVERAGE?REQUEST COVERAGE
  • 5. …ModuleCODE UNIT TESTMethodClass
  • 6. SPRING MVC TESTClientRequestRequest ProcessBlack BoxRsponse
  • 7. 실제 서버에서 SPRING MVC가요청(REQUEST)에 응답(RESPONSE)하는부분을 TEST에서 완벽히 재현
  • 8. 실질적인 테스트를 위해서는BLACK BOX TEST가 필요
  • 9. SPRING MVC TEST 구조Perform 요청 사전조건Expect 테스트Do 직접실행Return 반환
  • 10. 예제 코드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(); }
  • 11. 예제코드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()); } }
  • 12. 코드 설명(설정) @WebAppConfiguration // WebApplicationContext 를 가져 올 수 있도록 하는 어노테이션 @Autowired WebApplicationContext wac; MockMvc mockMvc; //생성된 mock MVC 가상서버(?)는 재활용 가능하다. @Before public void init() { mockMvc =MockMvcBuilders.webAppContextSetup(wac).build(); // Test를 위한 Spring MVC 가상(?)의 서버(가칭 MockMVC)를 사전에 생성 }
  • 13. 예제 코드 설명(요청) mockMvc.perform(get("/test/") .header("x-requested-with", "XMLHttpRequest") .accept(MediaType.APPLICATION_JSON)) // 여기 까지 Mock MVC로 요청을 보내기 위한 사전 조건을 설정 //Header, cookie등을 설정 할 수 있다.
  • 14. 예제 코드 설명(응답) .andExpect(handler().handlerType(Controller.class)) // 요청에대한 맵핑된 MVC컨트롤러 클래스 확인 .andExpect(handler().methodName("test")) // 요청에대한 맵핑된 MVC컨트롤러의 클래스에 속한 메소드 확인 .andDo(MockMvcResultHandlers.print()); // 헤당 요청과 응답에 대한 처리를 Logging 처리
  • 15. 소스자체는 간결하고 이해하기 쉬운(?)DSL형태의 모양을 가지고 있다.( 물론 호불호가 갈리지만! 패스 )
  • 16. JUnit 에서 테스트 용도로 사용하는메소드assertThat, assertEquals, asserTrue등을직접 사용하지 않고 내부적으로사용한다!
  • 17. 도대체 어떤 테스트를 지원하는가?
  • 18. org.springframework.test.web.servlet.result.MockMvcResultMatchers클래스 안에 다 들어가 있지만읊어보자면…
  • 19. 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(.., ..)) 비동기 요청에 대한 응답 정보는?
  • 20. 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(..))
  • 21. 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체크로 통한 에러 여부 등을체크한다.
  • 22. VIEW TEST View name test ( 해당 요청에 선택된 View name 테스트 ) .andExpect(view().name(..))
  • 23. 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(..))
  • 24. 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 객체 비교
  • 25. 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의 수 테스트
  • 26. 계속 됩니다.