단위 테스트의 의미
전통적 단위 테스트 : 제품의 기능을 테스트
TDD에서 말하는 테스트 : 메소드 단위 테스트
테스트 케이스를 작성하기 위한 팁
1. 요구사항 이름의 테스트 케이스로 메소드 이름을 한글로 작성한다.
2. 깨진 테스트 케이스는 삭제하고 커밋 전 리뷰로 보완한다.
3. 시스템 테스트, 통합 테스트도 자동화 해야한다.
spring MVC TEST를 사용하는 이유
spring MVC에서는 mock로만 테스트 하기에는 한계가 있고
@RequestMapping, View Resolving을 테스트 할수없다.
spring mvc 를 mockMVC로 묶어 Request, Response를 테스트 할수있다.
없다면 gradle에 의존성 주입을 해줘서 라이브러리를 추가해줘야한다.
@RunWith
JUnit 확장하는 어노테이션이며 SpringJUit4classRunner로 JUnit용 테스트 컨텍스트 프레임 워크 확장 클래스를 지정하면 테스트 진행시 컨텍스트를 생성하고 관리하는 작업을 한다. 지정하지 않을시 SpringRunner.class로 사용된다.
@ContextConfiguration// gradle이 아닌 xml을 사용할때 사용한다.
Spring Bean 메타 설정 파일의 위치를 지정한다.
지정하지 않는다면 테스트 파일의 패키지에서 설정파일을 찾는다.
ContextCOnfigLocationTest-context.xml 대소 구분없음
@WebAppConfiguration
웹 어플리에키션 전용 DI 컨테이너로 처리한다.
@ignore
해당 테스트를 테스트하지 않는다.
@Test
단위테스트를 선언한다.
@Test(tiemout = 6000)단위는 밀리로 해당시간을 넘기면 실패한다.(6초)
@Test(expected=NullPointerException)은 NullPointerException이 발생해야 통과한다.
@Before
테스트 이전에 실행할 메소드를 지정한다.
테스트 메소드가 실행 될때 마다 객체를 생성하여 실행한다.
@After
테스트 이후에 실행할 메소드를 지정한다.
테스트 메소드가 실행 될때 마다 객체를 생성하여 실행한다.
@BeforeClass
테스트 이전에 실행한 메소드를 지정한다.
@Before과 차이점은 한번만 실행되며 static으로 선언해야 한다.
@afterClass
테스트 이전에 실행한 메소드를 지정한다.
@after과 차이점은 한번만 실행되며 static으로 선언해야 한다.
MockMvc
서버를 실행하지 않고 스프링 MVC동작을 재현할 수 있는 클래스
MockMbc는 TestDispatcherServlet에게 요청
perform()
DispatcherServlet에 요청
get,post,delete, put,fileUpload등 메소드 제공
ResultActions()호출
MockHttpServletRequestBuilder()
param/params : 요청 파라미터 설정
header/headers: 요청 헤더설정
cookie: 쿠키 설정
content: 요청 본문 설정
requestAttr: 요청 스코프에 객체 설정
flashAttr: 플래시 스코프에 객체를 설정
sessionAttr: 세션 스코프에 객체를 설정
MockMvcResultMatchers()
param : Http 상태 코드 검증
header: 응답 헤더의 상태 검증
cookie: 쿠키 상태 검증
content: 응답 한 본문 내용 검증
view:변환 된 뷰 이름 검증
forwardedUrl:경로검증
redirectedUrl:경로나 url검증
flash: 플래시 스코프 상태 검증
request: 비동기 처리의 상태나 요청 스코프의 상태, 세션 스코프 상태 검증
ResultActions().andExpect()
실행 결과를 검증 인수 설정
ResultActions().andDo()
실행 결과를 처리할 수 있는 인수 지정
assert
assertArrayEquals(a,b): 배열 A와 B가 같은지 확인합니다.
assertEquals(a,b): A와 B가 같은지 확인합니다.
assertSame(a,b):a와b가 같은 객체인지 확인합니다.
assertTrie(a):A가 true인지 확인한다.
assertNotNull(a):A가 null이 아닌지 확인한다.