이번 챕터에서는 어떤 기능 또는 계층 단위로 작게 작성한 테스트를 검증할 때 유용하게 사용될 수 있는 **단위 테스트(Unit Test)**에 대한 가장 기초적인 내용을 학습해 보겠습니다.

단위 테스트란 이름처럼 작은 단위의 어떤 특정한 기능을 테스트하고, 검증하기 위한 도구를 의미합니다. 다른 말로, **테스트 케이스(Test Case)**를 작성한다고도 표현하는데, 그 과정에는 주로 입력 데이터, 실행 조건, 그리고 기대 결과에 대한 값이 포함됩니다.

스프링에서는 이러한 단위 테스트를 간편하고 효과적으로 수행할 수 있도록 자바 언어 기반의 JUnit이라는 오픈 소스 테스트 프레임워크를 제공하는데, 주로 각각의 단위 테스트는 메서드 단위로 작성됩니다. 좀 더 자세한 사용 방법은 아래에서 함께 확인해 보도록 하겠습니다.

MainTest 클래스 - 빈 조회 단위 테스트 작성

package com.springboot.v2;

import com.springboot.v2.discount.DiscountPolicy;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import static org.junit.jupiter.api.Assertions.*;

class KioskApplicationTest {
    // 스프링 컨테이너 생성
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

    // 빈 조회 테스트케이스
    @Test
    void findBean() {

        // (1) given => 초기화 또는 테스트에 필요한 입력 데이터
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        // (2) when => 테스트 할 동작
        DiscountPolicy discountPolicy = applicationContext.getBean("discountPolicy", DiscountPolicy.class);

        // (3) then => 검증
        Assertions.assertThat(discountPolicy).isInstanceOf(DiscountPolicy.class);
    }
}

(1) given: 입력 데이터

(2) when: 실행 동작

(3) then: 결과 검증