인프런 워밍업 클럽 BE 2기 - 클린코드 / 테스트코드 발자국 3주차
강의 출처 Practical Testing: 실용적인 테스트 가이드
학습 내용
단위 테스트
JUnit5
AssertJ(assertThat(actual).isEqualTo(expected)..)
테스트 케이스 세분화 하기
해피 케이스 (항상 통과하는 테스트)
예외 케이스 -> 경계값 테스트 (범위, 구간, 날짜 등)
테스트 하기 어려운 영역은 구분하고 분리해야 한다. (테스트 내부에 있는 값을 파라미터, 상수로 분리)
현재 날짜/시간, 랜덤한 값, 전역변수/함수, 사용자 입력 등
표준 출력, 메시지 발송, db에 기록하기 등
TDD : Test Driven Development
프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론
실패하는 테스트 작성(RED) -> 테스트를 통과하는 최소한의 코딩(GREEN) -> 구현 코드 리팩토링(REFACTOR)
TDD의 핵심가치 - 피드백
DisplayName
문장 : A이면 B이다. / A이면 B가 아니고 C이다.
테스트 행위에 대한 결과까지 기술
도메인 용어를 사용하여 추상화 된 내용 담기
테스트의 현상을 중점으로 기술 X
특정 시간 이전에 주문을 생성하면 실패한다.(X)
영업 시간 이전에는 주문을 생성할 수 없다.(O)
BDD : Behavior Driven Development
TDD에서 파생된 개발 방법
Given : 시나리오 진행에 필요한 모든 준비 과정(객체, 값, 상태 등)
When : 시나리오 행동 진행
Then : 시나리오 진행에 대한 결과 명시, 검증
미션
Readable Code 강의의 지뢰찾기 프로젝트로 단위 테스트 작성하는 미션. CellSnapshotTest(셀의 상태 - 빈 셀, 지뢰 셀, 숫자 셀, 열지 않은 셀), CellPositionTest(Cellposition 생성 - 해피 케이스, 0 미만의 인덱스 Cellposition 생성 불가 - 경계값 테스트), GameBoardTest(지뢰 셀을 오픈하면 게임상태 Lose로 변경), ConsoleInputHandlerTest(사용자가 1을 입력하면 셀 오픈). 총 3개의 테스트 클래스와 8개의 테스트를 작성했다. GameBoardTest와 ConsoleInputHandlerTest는 테스트에 실패 했는데, GameBoardTest의 경우는 검증하고자 하는 메소드에서 값을 제대로 불러오지 못하여 실패했다. ConsoleInputHandlerTest는 Scanner를 테스트 해야 했는데 NoSuchElementException이 발생해 테스트에 실패했다.
회고
평소에 테스트에 대한 고민이 많았었는데, 강사님의 라이브 코딩으로 테스트 하는 법을 배울 수 있어서 좋았다. 무엇을, 어떻게 테스트 해야 하는지는 아직 어려움이 있어서 꾸준한 노력이 필요할 것 같다. 다음 주에는 강의 완강을 목표로 끝까지 최선을 다해야겠다.
댓글을 작성해보세요.