[남글읽기] 테스트하기 좋은 코드 - 제어할 수 없는 코드 개선 - 기억보단 기록을

jomminii·2022년 9월 3일
1

read-blogs

목록 보기
1/4

남 글 읽기 github

테스트하기 좋은 코드 - 제어할 수 없는 코드 개선 - 기억보단 기록을 을 읽고 작성한 내용 입니다.


LocalDateTimw.now() 와 같이 실행 시점마다 값이 달라지는 값에 의존하는 테스트는 테스트하기 좋지 않은 코드, 제어할 수 없는 코드다.
테스트 하기 어려운 로직이 도메인 로직에 들어있을 경우, 도메인에 의존한 전반적인 계층에 대한 테스트가 모두 어려워질 수 있다.
즉 테스트의 어려움은 전파된다.

해결방법 1

  • 생성자, 함수(메소드)의 인자로 테스트하기 어려운 코드의 결과를 받는다.
    • 함수의 인자가 너무 많아진다고 생각이 들 수 있음
      • 이때는 DTO 로 묶어서 전달하거나, 생성자 주입을 받아서 사용하거나, 함수 인자의 기본값을 사용하면 됨
      • (기본값 괜찮네, 테스트 할때는 직접 사용하고 싶은 값 넣어서 사용하면 됨)
      • 그런데 자바는 python 이나 javascript 처럼 default parameter 를 지원하지 않네
      • Does Java Have default parameters? - dev in web 을 참고해보면 method overloading, null 활용, 빌터 패턴 사용 등을 보여주는데
      • 빌터 패턴이 제일 바람직해 보임
    • 만약 위에서의 방법을 안쓴다면, 일단 제어할 수 없는 코드의 위치를 가장 바깥 쪽으로 밀어내는 방법도 있음.
      • repository 에서 service 로 service 에서 controller 로 해당 코드의 결과 값을 전달하는 곳을 밖으로 빼면
      • 그 안의 로직은 안전할 수 있음
      • 하지만 이 또한 controller 와 같은 바깥 로직은 테스트 하기가 어려워지므로 피하는게 좋음

해결방법 2

  • 의존성 주입을 사용한다.
    • 인터페이스 구현체를 만들어서 하나는 메인코드에, 다른 하나는 테스트 코드에 사용
    • 테스트에서 사용할 구현체에는 명확한 데이터를 전달하면 되므로 테스트 하기 어려운 코드를 테스트 할 수 있게 만들어준다.

결론

  • 디폴트 파라미터 사용과 의존성 주입을 사용하면 된다!
profile
고민은 격렬하게, 행동은 단순하게

0개의 댓글