리팩터링 2판 - Java로 정리 - (2) 테스트 코드

2024. 6. 6. 09:51· 리팩토링
목차
  1. 1. 리팩터링을 할 때 가장 먼저 해야할 일! - 테스트 코드 
  2. 2. 테스트 코드 작성
  3. 2 - 2. 자가진단 테스트 
  4. 3. 테스트 통과 확인
  5. 4. 마무리

https://www.yes24.com/Product/Goods/89649360

 

리팩터링 2판 - 예스24

개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계 프로그래머에게 리팩터링의 교본이었던 『리팩토링』은,

www.yes24.com

1. 리팩터링을 할 때 가장 먼저 해야할 일! - 테스트 코드 

 

리팩토링을 진행할 때, 테스트 코드는 매우 중요한 역할을 합니다. 테스트 코드는 현재 코드의 동작을 보장하고, 변경 후에도 기능이 올바르게 작동하는지를 확인하는 데 필수적입니다. 특히, 복잡한 시스템에서 기능이 다수의 모듈과 상호작용할 때, 테스트 코드는 리팩토링 중 발생할 수 있는 예기치 않은 오류를 사전에 방지할 수 있습니다.

 

리팩토링의 핵심 목표 중 하나는 코드의 가독성과 유지보수성을 높이는 것입니다. 하지만 코드 변경이 항상 예상한 대로 작동하지 않을 수 있기 때문에, 테스트 코드는 이러한 변화를 안전하게 수행할 수 있는 보호망을 제공합니다. 따라서, 모든 주요 기능과 경계 상황을 포괄하는 테스트 코드를 작성함으로써, 리팩토링 과정에서 발생할 수 있는 문제를 조기에 발견하고 수정할 수 있습니다. 이는 개발자의 자신감을 높이고, 코드 품질을 유지하는 데 큰 도움이 됩니다.

 

리팩터링을 하기 위해서 테스트 코드는 선택이 아니라 필수란 말씀!

 

2. 테스트 코드 작성

지난 시간에 작성한 코드는 링크를 참고하세요.

https://griotold.tistory.com/6

 

리팩터링 2판 - Java로 정리

https://www.yes24.com/Product/Goods/89649360  리팩터링 2판 - 예스24개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계

griotold.tistory.com

package org.study.refactoringpractice.play;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;

import static org.assertj.core.api.Assertions.assertThat;

class TheaterTest {

    private Theater theater;

    @BeforeEach
    void setUp() {
        theater = new Theater();
    }

    @DisplayName("원하는 문자열이 출력되는 자가진단 테스트")
    @Test
    void testOne() {
        // Given
        Play hamlet = new Play("hamlet", "Hamlet", "tragedy");
        Play asYouLikeIt = new Play("as-like", "As You Like It", "comedy");
        Play othello = new Play("othello", "Othello", "tragedy");

        Performance hamletPerformance = new Performance("hamlet", 55);
        Performance asYouLikeItPerformance = new Performance("as-like", 35);
        Performance othelloPerformance = new Performance("othello", 40);

        Map<String, Play> plays = Map.of(
                "hamlet", hamlet,
                "as-like", asYouLikeIt,
                "othello", othello
        );

        String customerName = "BigCo";

        Invoice invoice = new Invoice(customerName,
                List.of(hamletPerformance, asYouLikeItPerformance, othelloPerformance));

        // When
        String result = theater.statement(invoice, plays);
        String expected = "statement for (customer: BigCo)\n" +
                "Hamlet: $650.00 (55 seats)\n" +
                "As You Like It: $580.00 (35 seats)\n" +
                "Othello: $500.00 (40 seats)\n" +
                "Total amount: $1,730.00\n" +
                "You earned: 47 points\n";

        // Then
        assertThat(result).isEqualTo(expected);
    }
}

 

테스트 코드를 작성했으니, 이제부터 마음 놓고 리팩터링을 수행할 수 있게 되었습니다.

2 - 2. 자가진단 테스트 

개발자가 일일이 코드의 동작 여부를 눈으로 확인하는 것은 비효율적입니다. 대신, 자동화된 테스트는 코드 변경 후 테스트가 통과되는지 여부를 빠르게 확인할 수 있도록 해줍니다. 이는 개발자가 코드 변경 후 발생할 수 있는 문제를 신속하게 발견하고 수정할 수 있게 하며, 코드 품질을 유지하는 데 중요한 역할을 합니다. 자동화된 테스트를 통해 초록불로 모든 테스트가 통과되었음을 확인하면, 코드가 정상적으로 작동하고 있음을 쉽게 확인할 수 있습니다. 이로 인해 개발자는 더 효율적으로 작업할 수 있고, 코드의 신뢰성을 높일 수 있습니다.

3. 테스트 통과 확인

테스트 통과!

4. 마무리

오늘은 리팩터링을 수행하기전, 테스트 코드를 작성해보았습니다. 테스트 코드는 일종의 "안전망"과 같은 역할을 해줌으로써, 개발자가 코드를 망가뜨릴 걱정없이 리팩터링을 수행할 수 있게 해줍니다.

 

테스트는 코드 변경 후 기능이 올바르게 작동하는지를 보장하며, 자동화된 테스트는 개발자가 일일이 검증할 필요 없이 코드의 안정성을 확인할 수 있게 해줍니다. 리팩터링 전 테스트 코드를 작성하는 습관을 길러, 더 나은 코드 품질을 유지할 수 있도록 노력합시다.

 

https://github.com/Griotold/refactoring-practice

 

GitHub - Griotold/refactoring-practice: 마틴 파울러 - 리팩토링 2판 - java로 연습

마틴 파울러 - 리팩토링 2판 - java로 연습. Contribute to Griotold/refactoring-practice development by creating an account on GitHub.

github.com

 

'리팩토링' 카테고리의 다른 글

Null 체크에서 Optional 패턴으로 – Enum 변환 메서드 리팩토링 스토리  (0) 2025.05.02
리팩터링 2판 - Java로 정리 - (3) statement() 함수 쪼개기  (0) 2024.06.07
리팩터링 2판 - Java로 정리  (0) 2024.06.05
  1. 1. 리팩터링을 할 때 가장 먼저 해야할 일! - 테스트 코드 
  2. 2. 테스트 코드 작성
  3. 2 - 2. 자가진단 테스트 
  4. 3. 테스트 통과 확인
  5. 4. 마무리
'리팩토링' 카테고리의 다른 글
  • Null 체크에서 Optional 패턴으로 – Enum 변환 메서드 리팩토링 스토리
  • 리팩터링 2판 - Java로 정리 - (3) statement() 함수 쪼개기
  • 리팩터링 2판 - Java로 정리
Griotold
Griotold
Griotold
Griotold's Olive Oil
Griotold
전체
오늘
어제
  • 분류 전체보기 (89)
    • 테스트 (4)
      • Spock (1)
      • Junit (3)
    • 디자인 패턴 (1)
    • 깃 (2)
    • 리팩토링 (4)
    • 항해플러스 백엔드 5기 (3)
    • 인프런 워밍업 클럽 스터디 2기 백엔드 (4)
    • 코딩테스트 (10)
    • 자바 심화 2기 (7)
    • 백엔드 면접 질문 (19)
    • 인프라 (17)
      • docker (5)
      • CI, CD (5)
      • Monitoring (6)
      • AWS (1)
    • 데이터베이스 (1)
      • Redis (1)
    • 메시지큐 (3)
      • rabbitMQ (0)
      • kafka (3)
    • MSA (7)
    • JPA (1)
    • Spring (5)
      • Spring AI (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 99클럽
  • actuator
  • Spring
  • java
  • micrometer
  • 배포
  • MSA
  • 리팩터링
  • TIL
  • 자바
  • 프로그래머스
  • backend
  • 코딩테스트준비
  • JPA
  • 백준
  • prometheus
  • 읽기좋은코드
  • 개발자취업
  • 항해99
  • github
  • 백엔드
  • githubactions
  • 이분탐색
  • grafana
  • 티스토리챌린지
  • DATABASE
  • junit5
  • CICD
  • docker
  • 오블완

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Griotold
리팩터링 2판 - Java로 정리 - (2) 테스트 코드
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.