[스프링(spring)]TDD(Test Driven Development)

allnight5·2023년 1월 26일
0

스프링

목록 보기
39/62

참조사이트 및 코드 예시

TDD(Test Driven Development:테스트 주고 개발)

목적

  • 새로운 버그의 발생을 즉시파악
  • 잘 작동하는 깔끔한 코드
  • 방치 된 1개의 실패는 전체의 실패(100 -1 =0)

목표

  1. 버그 발생을 파악 할수 있어야한다.
  2. 내일, 모레, 1년, 10년후에도 정상적으로 동작해야 한다.
  3. 재사용이 가능해야 한다.
  4. 자동화가 가능해야 한다.
  5. 수정/보완 된 코드로 인해 기존 코드에 버그가 발생하지 않음을 보장한다.

테스트 주도 개발 작성시 이점

  1. 기능에 집중 할 수 있다.
    • 코드 구현 -> 서버실행 -> 수동입력 -> 실행 ->에러 ->에러분석 ->해결 or 버그 다시분석
      테스트를 작성하면 에러를 즉시 확인 할 수 있어서 위에 반복 과정이 줄어듬
  2. 작성한 코드만 필요하다
    • DB연동, 서버 연결 없이 테스트 할수있다.

단위 테스트의 의미
전통적 단위 테스트 : 제품의 기능을 테스트
TDD에서 말하는 테스트 : 메소드 단위 테스트

테스트 케이스를 작성하기 위한 팁
1. 요구사항 이름의 테스트 케이스로 메소드 이름을 한글로 작성한다.
2. 깨진 테스트 케이스는 삭제하고 커밋 전 리뷰로 보완한다.
3. 시스템 테스트, 통합 테스트도 자동화 해야한다.

spring MVC TEST를 사용하는 이유
spring MVC에서는 mock로만 테스트 하기에는 한계가 있고
@RequestMapping, View Resolving을 테스트 할수없다.
spring mvc 를 mockMVC로 묶어 Request, Response를 테스트 할수있다.

없다면 gradle에 의존성 주입을 해줘서 라이브러리를 추가해줘야한다.

2018년도




@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이 아닌지 확인한다.




요약

  1. TDD는 테스트 코드 메소드 부터 작성하고 그에 맞춰서 로직메소드를 작성한다.
  2. 단위테스트는 메소드 단위이다.
  3. DB연동 서버 연결없이 가능하다.
  4. 작동방식에 따라 올바른 테스트 어노테이션을 사용하자
profile
공부기록하기

0개의 댓글