자동차 경주-자동차 경주
리뷰 내용
🤔 리뷰 링크
자동차 경주: 3단계 자동차 경주 #5327
🤔 메서드 네이밍
리뷰어
- 최대한 요구 사항이 잘 들어나게 짓는게 좋은거 같다.
🤔 테스트 더블
질문
이번 미션에서 자동차의 이동 여부는 램덤값으로 결정되었는데 이러한 예측 불가능한 값을 이용하여
로직을 수행하는 코드 대해 어떻게 테스트 코드를 작성해야 할지 모르겠습니다.
리뷰어
- 테스트 더블에 대한 개념을 잡고가는게 어떨지?
테스트 더블(Test Double, 테스트 대역)
테스트 더블은 실제 DOC와 똑같이 행동하지 않아도 되며, 똑같은 API만 제공하면 된다.
- 테스트를 할 때 예측 불가능한 요소를 제거할 수 있습니다.
- 테스트 더블 종류
- Dummy
- 단순히 인스턴스화된 객체가 필요한 경우에 사용합니다.
- 기능까지는 필요하지 않기 때문에 정상 동작을 보장하지는 않습니다.
- Stub
- 객체가 실제로 동작하는 것처럼 보이게 만들어 놓은 객체입니다.
- 테스트에서 호출된 요청에 미리 준비해둔 결과를 제공합니다.
- Fake
- 복잡한 로직에서 필요로 하는 동작을 단순화해서 구현한 객체입니다.
- 동작의 구현을 가지고 있지만 실제 프로덕션에서는 적합하지 않습니다.
- Spy
- stub의 역할을 가지면서 호출 내용에 대한 정보를 기록합니다.
- Mock
- 호출에 대한 기대를 명세하고 해당 내용에 따라 동작하도록 프로그래밍 된 객체입니다.
- 테스트 하고자 하는 코드와 엮인 객체들을 대신하기 위해 만들어진 객체입니다.
- 상태 기반 테스트 VS 행위 기반 테스트
- 상태 기반 테스트
- 행위 기반 테스트
- 로직이 정상적으로 수행되는지 확인하는 테스트입니다.
- 상태값으로 로직이 예상대로 수행되었는지 확인하기 어려운 경우 사용합니다.
- Test Double(테스트 더블)알아보기
- 테스트 코드 작성
- (6주차) 테스트 스텁과 목 오브젝트의 차이점 #16
테스트의 대상이 예측할 수 없는(Random) 객체에 대해 종속성을 가지는 경우
🤔 원시값 포장 객체를 적극 활용하자
리뷰어
- 원시값을 객체로 포장하여 원시 값에 대한 검증 로직을 객체 내부에 할 수 있도록 하는건 어떨지?
- 이러한 원시값 포장을 통해서 좀 더 객체의 역할과 책임을 집중시킬 수 있다.
🤔 컴파일 타임 의존성은 지양하자
리뷰어
- 컴파일 타임 의존성은 유연하지 못한 코드를 만들게된다.
🤔 정적 팩토리 메서드를 사용하자
리뷰어
🤔 불변객체 또는 복사본으로 전달하자
리뷰어
- 불변객체 또는 복사본을 이용하여 원본 객체는 보존하자
불변객체