[EFUB 세미나] TDD

마코레·2022년 5월 10일
0

백엔드개발

목록 보기
13/18

TDD 테스트 예시


로그인 서비스(유저이름, 암호) 제작 시 필요한 테스트는?

  • 단위 테스트
    - 유저 이름 및 암호 필드에 대한 lenth limit 테스트
    • 유효한 입력 값인지 확인
  • 통합 테스트
    - 스프링 프레임워크 설정이 올바른지
    • SQL 쿼리문이 맞는지
    • DB 트랜잭션이 잘 동작하는지
  • 기능 테스트(브라우저 테스트)
    - 유저가 로그인 버튼을 누르면 홈페이지로 이동하는지
    • 전체적인 플로우등에 해당됨
  • 단위-통합-기능 순서대로 피라미드 구성됨. 단위테스트 부분이 잘 동작하지 않는다면 윗단계인 기능테스트등에서도 문제가 있을 가능성이 많음

단위 테스트


  • 테스팅 시간 비용 절감
  • 새로운 기능 추가 시 수시로 빠르게 테스트 가능
  • 리팩토링 시 안정성 확보
  • 코드에 대한 문서가 될 수 있음

TDD 개발 주기


개발 주기란

red : 실패하는 테스트코드
green : 테스트 성공시키기 위한 실제 코드 작성
blue : 중복 코드 제거, 개선 하는 부분

주기 예시

※ 생년월일을 입력받으면, 나이를 출력하는 프로그램
1. 목표 = 2015, 2022 → 7살
2. 실패 테스트 설계 → 사실, 실제로 test설계시 service를 가져와서 사용할텐데, test를 처음 짤때는 service 코드가 없을테니까 실패할 수 밖에 없음
3. 테스트를 통과할 수 있는 프로그램을 작성(service)
4. 성공 여부 확인
5. 성공했다면 새로운 테스트 추가, 아니면 다시 리팩토링

TDD 개념


given-when-then

  • given
    - 테스트에서 구체화하고자 하는 행동을 시작하기전, 상태 설명
    • ex) 새로운 유저
  • when
    - 구체화하고자 하는 행동
    • ex) 서비스의 join을 호출해서 실제 회원가입하기
  • then
    - 특정 행동으로 인해 발생할 것이라고 예상되는 변화에 대한 설명
    • ex) 방금 저장된 유저의 이름이 예상하는것과 같은지 확인

test code 이점

  • 하지 않을때, tomcat 실행하고, postman으로 요청하고, 이상하면 중지해서 오류찾는등의 과정이 필요없음
  • 튼튼한 객체 지향적 코드 생산
  • 재설계 시간 단축
  • 디버깅 시간 단축
  • 테스트 문서 대체 가능(테스트 코드만 봐도 이해되니까)
  • 추가 구현 용이함

TDD 라이브러리


  • spring-boot-starter-test dependencies 추가
  • JUnit
    - assert 메서드로 테스트 케이스 수행결과 판별
    • annotation으로 간결하게 지원
  • AssertJ
  • Hamcrest
  • Mockito
    - 단위 테스트 작성시, 필요한 객체를 실제로 만들기 어려운경우 가짜 객체 만들어줌
    • MockMvc
      • 서버에 배포하지않고, 테스트용 mvc 환경을 만들어서 요청/전송/응답 기능을 제공해줌
        • 생성하고, 요청정보 입력하고, 응답값을 Expect를 이요해 테스트
profile
새싹 백엔드 개발자

0개의 댓글