TDD

  • 관련 카테고리 : [taxonomy category field=link]

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

     

    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...