단위테스트(Unit test)

2024. 11. 10. 04:13·TDD

 

작은 코드 단위로 독립적으로 검증하는 테스트 (클래스 or 메서드)

검증 속도가 빠르고, 안정적이다.

 

예시로 음료 여러 잔을 한번에 담는 기능을 단위테스트 해보자

기능을 구현 할 때는 아직 드러나지 않은 요구 사항이 있는가 항상 고민해야한다

 

테스트 케이스 세분화하기

1. 해피케이스 : 성공하는 케이스 

  cafeKiosk.add(americano,2);
  
  //해피케이스
  assertThat(cafeKiosk.getBeverages().get(0)).isEqualTo(americano);
  assertThat(cafeKiosk.getBeverages().get(1)).isEqualTo(americano);

 

2. 예외케이스 : 실패하는 케이스 

//예외 케이스
assertThatThrownBy(()-> cafeKiosk.add(americano,0))
        .isInstanceOf(IllegalArgumentException.class)
        .hasMessage("음료는 한잔 이상 주문하실 수 있습니다.");

 

해당 케이스를 테스트 할때는, 경계값 테스트가 중요하다. 

ex) 3이상일 경우 통과라는 조건이 있다.

-> 해피케이스는 : 3 검증

-> 예외케이스는 : 2 검증

 

 

 

테스트하기 어려운 영역을 구분하고 분리하기

요구조건 : 운영시간( 10: 00 ~ 22: 00 ) 외에는 주문을 생성할 수 없다. 

 public Order createOrder() {
  LocalDateTime currentDateTime = LocalDateTime.now();
  LocalTime currentTime = currentDateTime.toLocalTime();
  if(currentTime.isBefore(OPEN_TIME) || currentTime.isAfter(CLOSE_TIME)) {
      throw new IllegalArgumentException("운영 시간이 아닙니다.");
  }
  return new Order(LocalDateTime.now(), beverages);
}

 

- LocalDateTime 으로 인해 시간에 따라 성공하기도 하고, 실패하기도 함. 즉, 23:00시에 TEST할 경우에는 실패하게 된다.

   public Order createOrder(LocalDateTime currentDateTime) {
       ..생략
    }
  • 테스트가 어려운 영역을 외부에서 받을 수 있도록 파라미터로 변경
  • 즉, 테스트 코드 상에서 원하는 값을 넣어줄 수 있도록 설계를 변경한다
  • 테스트하기 어려운 영역을 외부로 분리할수록 테스트 가능한 코드는 많아진다.

 

테스트 하기 어려운 영역

  • 관측할 떄마다 다른 값에 의존하는 코드
    • 현재날짜/시간, 랜덤값, 전역 변수/함수, 사용자 입력 등
  • 외부 세계에 영향을 주는 코드
    • 표준 출력, 메세지 발송, 데이터베이스 기록하기 등

 

테스트 하기 쉬운 영역 ( 순수 함수)

  • 같은 입력에는 항상 같은 결과
  • 외부 세상과 단절된 형태
  • 테스트 하기 쉬운 코드

 

 

참고 및 출처 : https://www.inflearn.com/course/practical-testing-%EC%8B%A4%EC%9A%A9%EC%A0%81%EC%9D%B8-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B0%80%EC%9D%B4%EB%93%9C/dashboard

'TDD' 카테고리의 다른 글

Presentation Layer의 테스트  (0) 2024.11.24
레이어드 아키텍처(Layered Architecture) 와 테스트  (0) 2024.11.18
테스트는 [문서]다  (1) 2024.11.15
TDD가 정확히 무엇일까?  (0) 2024.11.11
테스트는 왜 필요할까?  (0) 2024.11.09
'TDD' 카테고리의 다른 글
  • 레이어드 아키텍처(Layered Architecture) 와 테스트
  • 테스트는 [문서]다
  • TDD가 정확히 무엇일까?
  • 테스트는 왜 필요할까?
슈가솔트
슈가솔트
  • 슈가솔트
    소금과 설탕
    슈가솔트
  • 전체
    오늘
    어제
    • 분류 전체보기 (31)
      • Database (10)
      • TDD (11)
      • Java (0)
      • 회고 (1)
      • 코테 (1)
      • CS (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    단위테스트
    티스토리챌린지
    stubbing
    오블완
    asciidoc
    튜플
    랜덤i/o
    db회복
    CQRS
    데이터베이스
    pagination
    db데드락
    DB
    testcode
    테스트작성
    순차i/o
    백엔드
    반정규화
    db #datebase #dbms
    릴레이션
    B+Tree
    컨트롤러테스트
    통합테스트
    Mockito
    아키텍처레이어
    spring rest docs
    TDD
    sql 안티패턴
    인덱스
    mocking
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
슈가솔트
단위테스트(Unit test)
상단으로

티스토리툴바