[스프링부트3] 테스트 코드 개념 익히기 - JUnit

테스트 코드 개념 익히기

  • 테스트 코드
    • 개발자가 작성한 코드가 의도대로 동작하는지
    • 예상치 못한 문제가 없는지 확인하기 위해 작성하는 코드
  • 장점
    • 유지보수성 증대
      • 코드 수정시에 기존 기능이 제대로 작동하는지 걱정 X

테스트 코드?

  • 프로젝트의 test 디렉터리에 작성
  • 일반적으로 given-when-then 패턴을 사용한다.

given-when-then 패턴

  • given
    • 테스트 실행을 준비하는 단계
    • 필요한 데이터를 설정하거나 객체 초기화
  • when
    • 테스트를 진행하는 단계
    • 실제 코드의 메서드를 호출한다.
  • then
    • 테스트 결과를 검증하는 단계
    • 반환된 결과나 객체의 상태를 확인한다.
@DisplayName("새로운 메뉴를 저장한다.")
@Test
public void saveMenuTest() {
    // given : 메뉴를 저장하기 위한 준비 과정
    final String name = "아메리카노";
    final int price = 2000;
    final Menu americano = new Menu(name, price);

    // when : 실제로 메뉴를 저장
    final long savedId = menuService.save(americano);

    // then : 메뉴가 잘 추가되었는지 검증
    final Menu savedMenu = menuService.findById(savedId).get();
    assertThat(savedMenu.getName()).isEqualTo(name);
    assertThat(savedMenu.getPrice()).isEqualTo(price);
}

스프링부트3 와 테스트

  • 스프링 부트는 spring-boot-starter-test 를 통해 테스트를 통한 다양한 도구와 어노테이션을 제공함

Junit이란?

  • 정의
    • 자바 언어를 위한 단위 테스트 프레임워크로, 코드가 의도대로 작동하는지 작은 단위로 검증
  • 구성
    • 단위 테스트
      • 코드의 작은 단위, 보통 메서드를 테스트하는 것을 의미한다.
    • 특징
      • 어노테이션을 통해 테스트 방식을 구분가능
      • @Test 어노테이션으로 독립 테스트 가능
      • 예상 결과를 검증하는 어셜션 메서드 제공
      • 사용 방법이 단순, 테스트 코드 작성 소요 시간 DOWN
      • 자동 실행과 자체 결과 확인을 통한 즉각적 피드백 가능

Junit으로 단위 테스트 코드 만들기

  • 1단계
    public class JunitTest {
        
        @DisplayName("1 + 2 는 3이다")
        @Test
        public void junitTest() {
            int a = 1;
            int b = 2;
            int sum = 3;
            
            Assertions.assertEquals(sum, a + b);
        }
    }
    • @DisplayName
      • 테스트 이름을 명시하는 어노테이션
    • @Test
      • 테스트 메서드를 지정하는 어노테이션
    • @Assertions.assertEquals
      • 값이 같은지 확인하는 검증 메서드.
  • 2단계
    • 콘솔창에 정상으로
      • 성공 여부
      • 테스트 케이스 이름
      • 테스트 실행 시간 정보 확인가능
  • 3단계
    • 실패시
    @DisplayName("1 + 2 는 4이다")
        @Test
        public void junitTest2() {
            int a = 1;
            int b = 2;
            int sum = 4;
            
            Assertions.assertEquals(sum, a + b);
        }
    • 위는 실패 케이스
    • 수많은 테스트 중에 하나라도 실패하면 전체 테스트가 실패한다.
  • 4단계
    • 테스트관련 어노테이션 사용법
    1. JUnit 주요 어노테이션
      • @BeforeAll
        • 전체 테스트 시작 전에 한 번만 실행.
        • 주로 테스트 환경 초기화에 사용
        • 데이터 베이스 연결 설정
        • static 메서드가 선언되어야합니다!
      • @BeforeEach
        • 각 테스트 케이스 시작 전에 매번 실행
        • 테스트에 필요한 객체 초기화나 값 설정에 사용
        • static 이 아니어야함
      • @Test
        • 실제 테스트를 실행하는 메서드를 지정.
      • @AfterEach
        • 각 테스트 케이스 종료 후에 매번 실행
        • 테스트 이후 정리 작업에 사용
      • @AfterAll
        • 전체 테스트 종료 후에 한 번만 실행
        • 테스트 환경의 정리에 사용
        • 데이터 베이스 연결 종료 시 사용
        • 공용 자원의 해제
        • static 으로 선언
    1. 예제
      public class JUnitCycleTest {
          @BeforeAll // 전체 테스트 실행 전에 딱 한번만 실행되는 메소드 static으로 선언
          static void beforeAll() {
              System.out.println("beforeAll");
          }
          
          // 각각의 테스트 실행 전에 실행되는 메소드
          @BeforeEach
          void beforeEach() {
              System.out.println("beforeEach");
          }
          
          @Test
          public void test1() {
              System.out.println("test1");
          }
          
          @Test
          public void test2() {
              System.out.println("test2");
          }
          
          @Test
          public void test3() {
              System.out.println("test3");
          }
          
          // @AfterEach // 각각의 테스트 실행 후에 실행되는 메소드
          @AfterEach
          void afterEach() {
              System.out.println("afterEach");
          }
          
          // @AfterAll // 전체 테스트 실행 후에 딱 한번만 실행되는 메소드 static으로 선언
          @AfterAll
          static void afterAll() {
              System.out.println("afterAll");
          }
      }


Uploaded by N2T