티스토리 뷰

donaricano-btn
반응형

아래와 같은 레거시 코드가 있다고 생각해 보자.

 

public boolean hasTray(List<String> menus) {

  // 메뉴가 3개 이상이면 들고가기 쉽지 않기 때문에 쟁반이 필요하다.
  if (menus.size() > 2) {
  return true;
  }

  for (String menu : menus) {
    // 국물이 있거나 뜨거 요리는 들고가기 어렵기 때문에 쟁반이 필요하다.
    if (menu.equals("오뎅") || menu.equals("라면")) {
      return true;
    }

    // 세트 메뉴는 서빙되는 음식이 무조건 3개 이상이라 쟁반이 필요하다.
    if (menu.contains("세트")) {
      return true;
    }
  }

  return false;
}

 

위 코드는 분식집에서 주문받은 음식을 서빙할 때 쟁반이 필요한지를 판단하는 메소드를 나타낸다.

만약 위 코드에 주석이 없었다면 어땠을까? 주석이 없이 코드만 본다면 도대체 어떤 기준으로 쟁반의 필요 여부를 판단하는지 알기 어렵다.

저렇게 주석이 없는 레거시 코드를 커버해야 하는 테스트 코드를 작성해 보자.

 

1. 먼저 가장 위에 있는 menu 의 사이즈가 3개 이상일 때를 커버하는 테스트 코드를 만든다.

2. 위의 테스트 코드의 커버리지 범위를 살펴본다.

메뉴의 사이즈를 체크하는 분기문이 커버된 것을 볼 수 있다.

3. 다른 분기문에 대해서도 테스트 코드를 만든다.

위 코드를 통해서 레거시 코드의 모든 부분이 커버 되는 것을 볼 수 있다.

 

이제 이 메소드는 테스트 코드가 보호해 주고 있기 때문에 부담없이 리팩토링을 진행할 수 있을 것이다.

반응형

'language > JAVA' 카테고리의 다른 글

Stream, 스트림  (0) 2020.05.06
람다 표현식(Lambda Expressions)  (0) 2020.05.03
데코레이터 패턴(Decorator Pattern)  (0) 2020.02.24
옵저버 패턴(Observer Pattern)  (0) 2020.02.12
전략 패턴(Strategy Pattern)  (0) 2020.02.11
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함