TDD


프로그램 작성보다 테스트 코드를 먼저 작상한다.

 

TDD의 목표 => 작동하는 Clean Code를 만드는게 목표

TDD 원칙

  • 자동화된 테스트가 실패한 경우만 새로운 코드를 작성한다. (대원칙) – 잘동작중인 코드를 변경하지 말라
  • 중복을 제거한다. (대원칙) – 리팩토링
  • 실패하는 테스트를 작성하기 전엔 코드를 작성 하지 않음 (대원칙을 지키기위한) – 테스트 코드를 먼저 작성한다.
  • 실패하는 테스트 코드를 한번에 하나 이상 작성하지 않는다.(대원칙을 지키기위한) 
  • 실패하는 테스트를 통과하기에 충분한 정도를 넘는 코드를 작성하지 않는다. (대원칙을 지키기위한)  – 열을 알지 말자 

TDD의 개발 발식 

테스트 코드 -> 본 코드 작성 -> 리펙토링

TDD의 장점

  • 유지 보수가 용이
  • 소스코드의 기록이 된다.
  • 테스트 코드가 항상 작성되니 유지보수시 수정하는 시간이 줄어든다. 

TDD의 단점

  • 특정 구현을 구현하는 시간이 오래걸린다. 

테스트 종류 

  • 단위 테스트 
    • 소스코드의 특정 모듈이 의도된 대로 작동하는지 검증하는 테스트
    • FIRST 원칙을 지켜라 
      • Fast – 빨라야함
      • Independent/ Isolated – 독립적이어야함
      • Repeatable – 반복할 수 있어야  함
      • Self Validating – 스스로 검증이 가능 해야함
      • Timely – 적시에 해야함
  • 통합테스트 
    • 단위 테스트 이후 모듈들의 상호작용이 제대로 이루어 지는지 검증하는 테스트

TDD 적용

저장고를 만든다고 가정해보자 

속성
  • 가로, 세로, 높이
  • 냉장, 냉동, 일반
  • 총 저장 수량
  • 현재 수량

To-Do

전체적인 것이아닌 세세한 것부터 출발

  • 저장고의 크기
  • 저장의 타입
  • 저장 가능한 수량
  • 현제 저장된 수량

Spring Test

테스트 관련 Spring 공식 문서 

https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#testing-introduction

Mock

객체간 의존성이 있는 객체를 대신하는 가짜 객체 

  • 테스트 작성을 위한 환경 구축이 어려운 경우
  • 테스트가 특정 경우나 순간에 의존적인 경우

@SpringBootTest

  • 통합테스트 애노테이션
  • APP 전체를 로드
  • 같은 Application Context를 로드함 => Fast Context등 다른 Context를 로드할  수 도 있음 

@WebMvcTest

  • Controller 테스트
  • Request, Response를 테스트할  수 있는 애노테이션 
  • Spring Security 가 제공하는 로그인, 로그아웃, 세션, 필터 도 자동 테스트 가능 
  • @Controller, @ControllerAdvice, @JsonComponent, Filter, WebConfigurer, HandlerMethodArgumentResolver 만 로드하여 비교적 가벼운 유닛 테스트

@DataJpaTest

  • JPA 관련 테스트 설정만을 로드함 
  • DataSource의 설정 유효성, 정상 여부 , DDL, DML 등여부도 테스트 가능

@RestClientTest

  • 클라이언트 요청을 서버가 정상적으로 수행하는지를 검증하는 테스트

@JsonTest

  • Json 직렬화 역직렬화 테스트

 

 

From.

Fast Campus



블로그 구독하기 !!

You may also like...

댓글 남기기

이메일은 공개되지 않습니다.