[SpringBoot] Test code

곽우현·2022년 9월 7일
0

SpringBoot

목록 보기
4/4
post-thumbnail

Unit Test

  • 프로그래밍에서 모든 함수와 메소드에 대한 테스트 케이스를 작성하여 의도된대로 잘 동작하는지 검증하는 절차이다.
  • 프로그램을 작은 단위(모듈)로 나눠 각 단위가 전확하게 동작하는지 검사함으로써 프로그램의 안정성을 높인다.
  • 가짜 프로그램, 객체(Mock Object)를 만들어 테스트를 할 수 있다.

JUnit

  • 자바의 유닛 테스트 프레임워크이다.
  • assert 메소드로 테스트 케이스의 수행 결과를 판별
  • JUnit4, JUnit5를 주로 사용한다.

JUnit4 vs JUnit5

  • JUnit4는 All in One으로 하나의 라이브러리만 추가하면 된다.
  • JUnit4는 java4 버전 이상에서 사용가능하다.
  • JUnit4는 Spring Boot 2.1 이전 버전까지 기본 제공
  • JUnit5는 JUnit Platform + JUnit Jupiter + JUnit Vintage로 이루어져 있다.
  • JUnit5는 java8 버전 이상에서 사용가능하다.
  • JUnit5는 Spring Boot 2.2 이후 버전부터 기본 제공

JUnit5 Annotation

  • @Test : 테스트 메소드임을 선언
  • @TestMethodOrder : 테스트 메소드 실행 순서 구성
  • @DisplayName : 테스트 클래스, 메소드르의 이름 선언
  • @DisplayNameGeneration : 이름 생성기 선언 ('_'문자를 공백으로 치완)
  • @BeforeEach : 모든 테스트 실행 전에 실행할 테스트
    • JUnit4에서는 @Before
  • @AfterEach : 모든 테스트 실행 후에 실행할 테스트
    • JUnit4에서는 @After
  • @BeforeAll : 현재 클래스 실행 전 제일 먼저 실행할 테스트
    • static으로 선언
    • JUnit4에서는 @BeforeClass
  • @AfterAll : 현재 클래스 종료 직후 실행할 테스트
    static으로 선언
    JUnit4에서는 @AfterClass
  • @Disabled : 이 클래스나 테스트를 사용하지 않음
    • JUnit4에서는 @Ignore
  • @ExtendWith : 확장을 선언적으로 등록할 때 사용

Spring Boot 2.2 이상으로 프로젝트를 생성하게 되면 자동으로 spring-boot-starter-test에서 JUnit5가 자동으로 추가된다.

  • mac : command + shift + T
  • windows : ctrl + shift + T

클래스와 테스트 메소드에 public을 넣지 않아도 된다.

기본 어노테이션

import org.junit.jupiter.api.*;

public class TestLifeCycle {

    /**
     * 모든 테스트가 실행되기 전에 반드시 한번 실행됨
     * static 메소드이어야 한다.
     */
    @BeforeAll
    static void beforeAll(){
        System.out.println("## Before All !!!!");
    }

    /**
     * 모든 테스트가 실행된 후에 반드시 한번 실행됨
     * static 메소드이어야 한다.
     */
    @AfterAll
    static void afterAll(){
        System.out.println("## After All !!!!");
    }

    /**
     * 특정 테스트가 실행되기 전에 항상 실행됨
     */
    @BeforeEach
    void beforeEach(){
        System.out.println("## Before Each !!!!");
    }

    /**
     * 특정 테스트가 실행된 후에 항상 실행됨
     */
    @AfterEach
    void afterEach(){
        System.out.println("## After Each !!!!");
    }

    @Test
    @DisplayName("TTTTTest1")
    void test1(){
        System.out.println("----Test1111111----");
    }

    @Test
    @DisplayName("TTTTTest2")
    void test2(){
        System.out.println("----Test222222----");
    }

    @Test
    @Disabled
    @DisplayName("TTTTTest3")
    void test3(){
        System.out.println("----Test333333----");
    }
}
profile
주니어 Java 개발자

2개의 댓글

어노테이션 설명이 조금 이상한 것 같은데, @BeforeAll 등의 어노테이션이 달린 메소드가 테스트가 맞나요?

1개의 답글