[Test] 테스트는 '문서'다.

2025. 7. 5. 18:11·Software Development/Test

테스트는 [ 문서 ]다.

테스트 코드를 단순히 프로덕션 코드를 검증하는 도구라고만 생각하면, 그 가치의 절반밖에 보지 못하는 것이다. 나는 테스트 코드가 곧 '살아있는 문서'라고 생각한다.

테스트가 왜 문서가 될까?

생각해보자. 우리는 항상 팀으로 일한다. 내가 짠 코드를 언젠가 다른 동료가 봐야 하고, 내가 과거에 했던 고민을 그 동료가 또 똑같이 할 필요는 없다.

바로 이때 테스트 코드가 빛을 발한다.

  • 다양한 테스트 케이스는 프로덕션 코드의 기능과 정책을 설명하는 가장 정확한 설명서가 된다.
  • 과거에 누군가 했던 고민의 결과물을 팀의 자산으로 만들어준다.
  • 새로운 팀원이 들어왔을 때, 테스트 코드를 통해 시스템의 동작 방식을 빠르게 이해할 수 있다.

결국 잘 짜인 테스트는 동료를 위한 가장 친절한 가이드가 된다.

좋은 문서 만들기: DisplayName을 섬세하게

그렇다면 어떻게 테스트를 '좋은 문서'로 만들 수 있을까? 가장 쉽고 강력한 방법은 테스트 이름을 잘 짓는 것이다. JUnit5의 @DisplayName을 적극적으로 활용하자.

  • '~ 테스트' 같은 명사 나열은 피하고, 'A이면 B이다' 형태의 문장으로 작성하자.
    • 음료 1개 추가 테스트 (X)
    • 음료를 1개 추가하면 주문 목록에 담긴다. (O)
  • 메서드 이름이 아닌, 도메인 정책과 비즈니스 관점에서 서술하자.
    • 특정 시간 이전에 주문하면 실패한다. (△)
    • 영업 시작 시간 이전에는 주문을 생성할 수 없다. (O)

테스트의 현상(성공, 실패)이 아닌, '그래서 어떤 행동이 어떤 결과를 낳는가'에 집중하는 것이 핵심이다.

BDD 스타일로 명확성 더하기

테스트를 시나리오 관점에서 작성하면 훨씬 이해하기 쉬운 '문서'가 된다. 이때 BDD(Behavior Driven Development) 스타일을 차용하면 큰 도움이 된다.

BDD는 TDD에서 파생된 방법론으로, 함수 단위의 테스트보다 시나리오 자체에 집중한다. 코드를 잘 모르는 사람이 봐도 이해할 수 있을 정도의 가독성을 추구한다. 핵심 구조는 다음과 같다.

  • Given (주어진 상황): 시나리오 진행에 필요한 모든 준비 과정.
  • When (행동): 시나리오의 핵심이 되는 행동.
  • Then (결과): 행동에 따른 결과와 검증.

이 구조는 테스트의 의도를 명확히 드러내 주고, 위에서 말한 '좋은 DisplayName'을 작성하는 데 훌륭한 가이드가 되어준다.

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

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

class CafeKioskTest {

    @Test
    @DisplayName("음료를 1개 추가하면 주문 목록에 담긴다.")
    void add() {
        // given
        CafeKiosk cafeKiosk = new CafeKiosk();
        Americano americano = new Americano();

        // when
        cafeKiosk.add(americano);

        // then
        assertThat(cafeKiosk.getBeverages()).hasSize(1);
        assertThat(cafeKiosk.getBeverages().getFirst().getName()).isEqualTo("아메리카노");
    }
}

@DisplayName과 Given-When-Then 주석만으로도 이 테스트가 무엇을 검증하는지 한눈에 파악할 수 있다. 이것이 바로 '테스트로 말하는 문서'다.


Ref) Practical Testing: 실용적인 테스트 가이드 강의 | 박우빈 - 인프런

'Software Development > Test' 카테고리의 다른 글

[Test] Business Layer Test(with Spring Boot)  (0) 2025.07.05
[Test] Persistence Layer Test(with Spring Boot, JPA)  (0) 2025.07.05
[Test] TDD(Test Driven Development)  (0) 2025.07.05
[Test] 단위 테스트(Unit Test)  (0) 2025.07.05
[Test] 테스트를 해야 하는 이유  (0) 2025.07.05
'Software Development/Test' 카테고리의 다른 글
  • [Test] Business Layer Test(with Spring Boot)
  • [Test] Persistence Layer Test(with Spring Boot, JPA)
  • [Test] TDD(Test Driven Development)
  • [Test] 단위 테스트(Unit Test)
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (456)
      • Software Development (27)
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8)
        • Code Style, Convetion (0)
        • DDD (0)
        • Software Engineering (18)
      • Java (71)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (12)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (129)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (5)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[Test] 테스트는 '문서'다.
상단으로

티스토리툴바