[인프런 워밍업 클럽 2기 클린코드 & 테스트 코드] 3주차 발자국
해당 글은 [인프런 워밍업 클럽 2기 클린 코드 & 테스트 코드]에 참가하여 박우빈님의 <Readable Code: 읽기 좋은 코드를 작성하는 사고법> 강의를 듣고 작성한 글입니다.
✍ 이번주 강의 요약
테스트는 왜 필요할까?
테스트 코드를 작성하지 않는다면
안정성 보장 X
유지 보수 어려움
테스트 코드로 작성하면 소프트웨어의 빠른 변화에 유연하게 대처 가능!
단위 테스트
간단한 카페 키오스크 프로그램을 만들어 수동 테스트와 자동 테스트 비교하기
JUnit5를 사용하자
해피 케이스와 예외 케이스 모두 검증해야 한다. -> 경계값 테스트로!
TDD : Test Driven Development
실패하는 테스트 작성 -> 구현부 없는 프로덕션 코드
최소한의 코딩으로 테스트를 통과하게끔 구현
리팩토링
테스트는 [ ]다.
테스트는 문서다.
테스트 코드는 프로덕션 기능을 설명하는 문서가 될 수 있다.
@DisplayName을 이용하여 코드를 설명하자
BDD -> Given, When, Then을 이용한 시나리오 기반 테스트
5-1. Spring & JPA 기반 테스트 : Persistance Layer
여러 모듈이 협력하는 기능은 통합 테스트를 진행한다.
Persistance Layer는 데이터베이스와 상호 작용하는 부분이다.
JPA 코드를 테스트하는데, 단위 테스트와 유사하다.
🏃 미션
Day12
Readable Code에서 진행했던 StudyCafe 프로그램을 기반으로 단위 테스트를 작성했다. 뭘 테스트하는게 좋을까... 고민했는데 일단 가장 중요한 건 돈💸이니까 주문 금액을 테스트해야겠다고 생각했다!
이용권별(시간권, 주간권, 고정권) 로 합계를 계산하는 로직을 테스트하기로 결정!
BDD를 이용하여
Given : 각 시간 또는 주간을 기준으로 SeatPass를 생성하고 (고정권은 LockerPass도 같이) 이를 기반으로 Order 객체를 생성했다.
When : getTotalPrice()를 실행시켰다.
Then : totalPrice의 값이 계산 결과와 맞는 지 확인했다.
그 다음엔 파일에서 이용권 목록을 읽어왔을 때, 각 이용권 타입에 맞는 이용권 목록을 제대로 추출하는 지 테스트 했다.
BDD를 이용하여
Given : seatPass 파일을 읽어와서 리스트에 담았다.
When : findPassBy()를 실행시켰다.
Then : 각 이용권 타입과 일치하는 지 확인했다.
마지막으로 이용권의 할인된 가격을 제대로 계산하는 지 테스트했다.
BDD를 이용하여
Given : 할인율이 존재하는 seatPass를 생성했다.
When : getDiscountPrice()를 실행시켰다.
Then : discountPrice의 값이 계산 결과와 맞는 지 확인했다.
🗒️ 회고
이번주는 제법 부지런히 강의를 들어서 뿌듯했다👍👍
미션 구현 자체는 그렇게 어렵지 않았는데 내 테스트 코드가 맞는 건지는 모르겠다......ㅜㅜㅋㅋㅋㅋ 아무튼 제출의 의미를 두는 걸로...
클린 코드 강의보다 테스트 코드 강의가 더 재밌다. 매번 프로젝트 할 때마다 테스트 코드 쪽은 손도 못대서 그런지 더 많이 제대로 알고 싶은 마음이 든다. 완강까지 화이팅!
댓글을 작성해보세요.