단위테스트
요구 사항
주문 목록에 음료 추가 / 삭제 기능
주문 목록 전체 지우기
주문 목록 총 금액 계산하기
주문 생성하기
1. 수동 테스트 vs 자동화된 테스트
단위 테스트
작은 코드 단위를 독립적으로 검증하는 테스트
작은 : 클래스 or 메서드
독립적 : 외부 상황에 의존하는 테스트가 아닌, 클래스 or 메서드만 검증
검증 속도가 빠르고, 안정적이다.
JUnit 5
단위 테스트를 위한 테스트 프레임워크
XUnit - 켄트 백
XUnit 으로 시작해서 자바에서는 JUnit 으로 발전되었다.
AssertJ
테스트 코드 작성을 원활하게 돕는 테스트 라이브러리
풍부한 API, 메서드 체이닝 지원
결론
일관성이 부족한 개인이 테스트하는 것은 불확실성을 유발한다.
테스트 도구들을 사용해서 일관적인 자동화된 테스트를 하자!
2. 테스트 케이스 세분화하기
요구사항
한 종류의 음료 여러 잔을 한 번에 담는 기능
질문하기 : 암묵적이거나 아직 드러나지 않은 요구사항이 있는가?
테스트 케이스 세분화하기
해피 케이스
예외 케이스
경계값 테스트가 매우 중요하다.
범위(이상, 이하, 초과, 미만), 구간, 날짜 등
경계값이나 경계값 주변값을 테스트 검증값으로 설정해서 테스트하는 것이 중요하다.
예를 들어, 3이상 인지 검증해라.
해피 케이스 : 3
예외 케이스 : 2
3. 테스트하기 어려운 영역을 분리하기
요구사항
가게 운영 시간(10:00 ~ 22:00) 외에는 주문을 생성할 수 없다.
테스트하기 어려운 영역
관측할 때마다 다른 값에 의존하는 코드
현재 날짜/시간, 랜덤 값, 전역 변수/함수, 사용자 입력 등..
우리가 작성한 코드가 외부 세계에 영향을 주는 코드
외부 세계 자체가 우리가 테스트하기 어렵다.
표준 출력, 메시지 발송, 데이터베이스 기록하기 등..
테스트하기 쉬운 영역 (순수 함수)
같은 입력에 항상 같은 결과
외부 세상과 단절된 형태
테스트하기 쉬운 코드
테스트하기 여러운 영역 구분하고 분리하기
테스트 하기 어려운 부분은 외부(매개변수 등등..) 로부터 받는 구조로 변경하면 된다.
테스트 하고자 하는 부분이 무엇인가?
영업 시간
내부 로직을 외부로 분리할수록 테스트 가능한 코드는 많아진다.
4. 키워드 정리
단위 테스트
수동 테스트, 자동화 테스트
JUnit 5, AssertJ
해피 케이스, 예외 케이스
경계값 테스트
테스트하기 쉬운/어려운 영역(순수 함수)
lombok (사용 가이드)
@Date,@Setter,@AllArgsConstructor지양양방향 연관관계 시
@ToString순환 참조 문제
Last updated