[TIL] 2025-02-25_Given-When-Then

Yuri·2025년 2월 25일

TIL

목록 보기
54/59
post-thumbnail

given-when-then 패턴 테스트코드 구현하기

TDD(Test Driven Development)

테스트 주도 개발

Red 단계에서는 실패하는 테스트 코드를 먼저 작성한다.
Green 단계에서는 테스트 코드를 성공시키기 위한 실제 코드를 작성한다.
Blue 단계에서는 중복 코드 제거, 일반화 등의 리팩토링을 수행한다.

테스트 준비

bom (Bill of Meterials): 의존성 버전 관리

  • Spring Boot
dependencies {
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

Given-When-Then 패턴

  • Given
    주어진 전체 조건을 정의하고 테스트 실행을 위한 준비 "어떤 배경이나 상태가 주어졌을 때"

  • When
    테스트하려는 메서드나 기능을 실행하는 과정
    "어떤 행동을 실행하면"

  • Then
    메소드나 기능이 실행된 후 예상되는 결과가 나오는지 확인
    "예상한 결과가 맞는지 확인한다."

  • 검증(Assertion): Expected, Actual 을 비교

    • assertThat().isEqualsTo()
    • assertEquals()
    • assertTrue()

@DisplayName("테스트명")


🌱 스프링 테스트

Annotation 종류

  1. @DataJpaTest: JPA 레포지토리 단위 테스트
  2. @ExtendWith: 서비스 단위 테스트
  3. @WebMvcTest: 컨트롤러 단위 테스트
  4. @SpringBootTest: 통합 테스트

Mocking

테스트를 하기 위한 코드 이외의 의존 객체들이 존재하는 경우 사용

  1. 외부 의존성 제거
  2. 테스트 범위 준수
  3. 에러 상황 강제 발생

행위 검증, 상태 검증

  • 행위 검증
    • "테스트 시 특정한 행위를 하였는가"를 확인하는 행위
    • 어떤 메서드를 호출하였는지
    • Mockito의 verify() 메서드를 통해 검증

테스트 코드 실습

📌 Repository -> Service -> Controller 순서로 테스트 코드 작성

🍯 Generate → Test 으로 자동 생성할 수 있다.

Repository

@DataJpaTest

Service

@ExtendWith(MockitoExtension.class)
테스트 대상 외는 @Mock
테스트 대상은 @InjectMocks

  • @Mock은 given 단계에서 Mocking 한다.

  • id는 entity가 save되면서 자동 증가 → 값이 없어서 테스트 시 직접 세팅 필요

    • 생성자로 값을 세팅
    • ReflectionTestUtils.setField()

Controller

@WebMvcTest(*Controller.class)

😎 예시코드 직접 작성해보기!

profile
안녕하세요 :)

0개의 댓글