TDD, 클린 코드 with Java 18기: 자동차 경주

yshjft·2024년 5월 11일
0

자동차 경주-자동차 경주

리뷰 내용

🤔 리뷰 링크

자동차 경주: 3단계 자동차 경주 #5327


🤔 메서드 네이밍

리뷰어

  • 최대한 요구 사항이 잘 들어나게 짓는게 좋은거 같다.

🤔 테스트 더블

질문

이번 미션에서 자동차의 이동 여부는 램덤값으로 결정되었는데 이러한 예측 불가능한 값을 이용하여 
로직을 수행하는 코드 대해 어떻게 테스트 코드를 작성해야 할지 모르겠습니다.

리뷰어

  • 테스트 더블에 대한 개념을 잡고가는게 어떨지?

테스트 더블(Test Double, 테스트 대역)

테스트 더블은 실제 DOC와 똑같이 행동하지 않아도 되며, 똑같은 API만 제공하면 된다.

  • 테스트를 할 때 예측 불가능한 요소를 제거할 수 있습니다.
  • 테스트 더블 종류
    • Dummy
      • 단순히 인스턴스화된 객체가 필요한 경우에 사용합니다.
      • 기능까지는 필요하지 않기 때문에 정상 동작을 보장하지는 않습니다.
    • Stub
      • 객체가 실제로 동작하는 것처럼 보이게 만들어 놓은 객체입니다.
      • 테스트에서 호출된 요청에 미리 준비해둔 결과를 제공합니다.
    • Fake
      • 복잡한 로직에서 필요로 하는 동작을 단순화해서 구현한 객체입니다.
      • 동작의 구현을 가지고 있지만 실제 프로덕션에서는 적합하지 않습니다.
    • Spy
      • stub의 역할을 가지면서 호출 내용에 대한 정보를 기록합니다.
    • Mock
      • 호출에 대한 기대를 명세하고 해당 내용에 따라 동작하도록 프로그래밍 된 객체입니다.
      • 테스트 하고자 하는 코드와 엮인 객체들을 대신하기 위해 만들어진 객체입니다.
  • 상태 기반 테스트 VS 행위 기반 테스트
    • 상태 기반 테스트
      • 객체의 상태값을 테스트입니다.
    • 행위 기반 테스트
      • 로직이 정상적으로 수행되는지 확인하는 테스트입니다.
      • 상태값으로 로직이 예상대로 수행되었는지 확인하기 어려운 경우 사용합니다.
  • Test Double(테스트 더블)알아보기
  • 테스트 코드 작성
  • (6주차) 테스트 스텁과 목 오브젝트의 차이점 #16

테스트의 대상이 예측할 수 없는(Random) 객체에 대해 종속성을 가지는 경우


🤔 원시값 포장 객체를 적극 활용하자

리뷰어

  • 원시값을 객체로 포장하여 원시 값에 대한 검증 로직을 객체 내부에 할 수 있도록 하는건 어떨지?
  • 이러한 원시값 포장을 통해서 좀 더 객체의 역할과 책임을 집중시킬 수 있다.

🤔 컴파일 타임 의존성은 지양하자

리뷰어

  • 컴파일 타임 의존성은 유연하지 못한 코드를 만들게된다.

🤔 정적 팩토리 메서드를 사용하자

리뷰어


🤔 불변객체 또는 복사본으로 전달하자

리뷰어

  • 불변객체 또는 복사본을 이용하여 원본 객체는 보존하자

불변객체

profile
꾸준히 나아가자 🐢

0개의 댓글