테스트하기 어려운 코드라는 6가지 신호

최근에 의존성 주입을 알게되어서 (신나서?) 마구마구 의존성을 주입하다보니 한 클래스를 생성하는데에 너무 많은 의존성을 주입하는 경우가 생기더군요. 가장 많은 건 13개까지… 그래서 과연 내가 잘하고 있는 것이 맞나 싶어 궁금해하고 있었는데, 오랜만에 들춰본 Laravel Testing Decoded 에서 명쾌하게 ‘아니다’ 라고 얘기해주고 있네요. 참고가 되실까 싶어 책의 내용을 일부 공유해봅니다.

테스트하기 여려운 코드라는 6가지 신호

  1. New Operators
    • 클래스 내부에서 다른 클래스를 생성하는 경우.
  2. Control-Freak Constructors
    • 생성자에서 의존성 주입 역할 이외에 다른 행위을 하는 경우.
  3. And, And, And
    • 클래스가 단일책임원칙을 지키지 않는 경우.
  4. Too Many Paths? Polymorphism to the Rescue!
    • switch 문이 있다면 더 작은 클래스들로 쪼개는 편이 테스트하기 쉬워진다.
  5. Too Many Dependencies
    • 의존성이 너무 많은 경우.(4개 이상이면 리팩토링이 필요하다고 합니다)
  6. Too Many Bugs

책에 다음과 같은 구절도 있으니, 앞으로는 어떻게 하면 의존성과 파라미터 사용을 줄일 수 있을지도 더 생각하면서 코딩해 버릇해야 겠습니다.

“Each time that you remove a dependency or parameter, you’re improving the code.”

JeffreyWay. ‘Laravel Testing Decoded.’

 

leaderboard-728x90

 

ORM 좋네요 좋아

Eloquent ORM을 이용하여 아래의 데이터를 조회하기 위한 코드를 작성했습니다.

  • A가 가진 모든 B들과
  • 그 B들이 가진 모든 C들 중 A와 관련 있는 것만 추린 것들과
  • 그 C들이 가진 모든 D들

그 결과 아래와 같은 코드가 나왔어요. ORM에 익숙한 분들은 이게 뭐? 하시겠지만 저는 굉장히 놀랬습니다 하하. 새삼 ORM에 더 익숙해지면 정말 편리해지겠구나 하는 생각이 드네요.

 

$a = A::find($id);

$a->load([
    'b',
    'b.c' => function($query) use ($a)
        {
            $query->where('a_id', $a->id);
        },
    'b.c.d'
]);

return $a;

 

+
‘b’, 가 없어도 똑같이 동작하네요!

 

leaderboard-728x90