46일차 - 테스트 코드 애노테이션

2024. 9. 10. 15:39·Java & Spring/Spring

□ Before & After 테스트

  1. @BeforeEach : 각각의 테스트 코드가 실행되기 전
  2. @AfterEach : 각각의 테스트 코드가 실행된 후
  3. @BeforeAll : 모든 테스트 코드가 실행되기 전
  4. @AfterAll : 모든 테스트 코드가 실행된 후

public class BeforeAfterTest {
    @BeforeEach
    void setUp() {
        System.out.println("각각의 테스트 코드가 실행되기 전에 수행");
    }

    @AfterEach
    void tearDown() {
        System.out.println("각각의 테스트 코드가 실행된 후에 수행\n");
    }

    @BeforeAll
    static void beforeAll() {
        System.out.println("모든 테스트 코드가 실행되기 전에 최초로 실행\n");
    }

    @AfterAll
    static void afterAll() {
        System.out.println("모든 테스트 코드가 수행된 후 마지막으로 수행");
    }

    @Test
    void test1(){
        System.out.println("테스트 코드 작성 1");
    }

    @Test
    void test2(){
        System.out.println("테스트 코드 작성 2");
    }
}

- 결과
모든 테스트 코드가 실행되기 전에 최초로 실행

각각의 테스트 코드가 실행되기 전에 수행
테스트 코드 작성 1
각각의 테스트 코드가 실행된 후에 수행

각각의 테스트 코드가 실행되기 전에 수행
테스트 코드 작성 2
각각의 테스트 코드가 실행된 후에 수행

모든 테스트 코드가 수행된 후 마지막으로 수행

 


□ Custom 테스트

1. @DisplayName("") : 테스트에 표시될 이름 설정

2. @Nested : 테스트를 그룹지을 때 사용

@Nested
@DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.")
class Test1 {
    @Test
    @DisplayName("Test1 - test1()")
    void test1() {
        System.out.println("Test1.test1");
    }

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

@Nested
@DisplayName("Test2 다른 주제")
class Test2 {
    @Test
    @DisplayName("Test2 - test1()")
    void test1() {
        System.out.println("Test2.test1");
    }

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

 

3. @TestMethodOrder(MethodOrderer.OrederAnnotation.class) : 테스트의 순서를 지정

    @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    class Test1 {

        @Order(1)
        @Test
        @DisplayName("Test1 클래스")
        void test() {
            System.out.println("\nTest1 클래스");
        }

        @Order(3)
        @Test
        @DisplayName("Test1 - test1()")
        void test1() {
            System.out.println("Test1.test1");
        }

        @Order(2)
        @Test
        @DisplayName("Test1 - test2()")
        void test2() {
            System.out.println("Test1.test2");
        }
    }
    
    - 결과
    Order(1) -> Order(2) -> Order(3) 순으로 출력
    Test1 클래스
    Test1.test2
    Test1.test1

□ Repeat 테스트

  1. @RepeatedTest(value = n, name = "") : value값만큼 반복
  2. @ParameterizedTest : 매개변수 값을 변경해가며 반복
    @ValueSource(ints = {1, 2, 3, 4...})
public class RepeatTest {
    @RepeatedTest(value = 5, name = "반복 테스트 {currentRepetition} / {totalRepetitions}")
    void repeatTest(RepetitionInfo info) {
        System.out.println("테스트 반복 : 
        " + info.getCurrentRepetition() + " / " + info.getTotalRepetitions());
    }

    @DisplayName("파라미터 값 활용하여 테스트 하기")
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3, 4, 5, 6, 7, 8, 9})
    void parameterTest(int num) {
        System.out.println("5 * num = " + 5 * num);
    }
}

 


□ Assertions 테스트

1. assertEquals(expect, result) &  asswerNotEquals(expect, result) : (기대 값)과 (결과 값) 비교 [같을 시 성공 & 다를 시 성공]

    @Test
    void test1() {
        Double result = calculator.operate(5, "/", 2);
        assertEquals(2.5, result);
    }
    
    @Test
    void test1_2() {
        Double result = calculator.operate(5, "/", 0);
        assertNotEquals(2.5, result);
    }

 

2. assertEquals(expect, result, new Supplier<String>()) : 테스트 실패 시 메세치 출력

    @Test
    void test1_1() {
        Double result = calculator.operate(5, "/", 0);
        // 테스트 실패 시 메시지 출력 (new Supplier<String>())
        assertEqu
    }

 

3. assertTrue & asserFalse : Boolean값 테스트 [값이 True면 성공 & 값이 False면 성공]

    @Test
    void test2() {
        assertTrue(calculator.validateNum(9));
        assertFalse(calculator.validateNum(0));
    }

 

4. assertNotNull & assertNull : Null값 테스트 [값이 Null이 아니면 성공 & 값이 Null이면 성공]

    @Test
    void test3() {
        Double result1 = calculator.operate(5, "/", 2);
        assertNotNull(result1);
        Double result2 = calculator.operate(5, "/", 0);
        assertNull(result2);
    }

 

5. assertThrows(Expect Exception, () -> method) : 예외 테스트 [예상한 예외가 맞으면 성공]

    @Test
    void test4() {
        IllegalArgumentException exception 
        = assertThrows(IllegalArgumentException.class, 
        () -> calculator.operate(5, "?", 2));
    }

 


□ Given - When - Then 패턴

  • given - 매개 변수 제공
  • when - 받은 매개 변수로 실행
  • then - 검증
 @Test
    @DisplayName("계산기 연산 성공 테스트")
    void test1() {
        // given
        int num1 = 5;
        String op = "/";
        int num2 = 2;

        // when
        Double result = calculator.operate(num1, op, num2);

        // then
        assertNotNull(result);
        assertEquals(2.5, result);
    }

□ Junit5 User Guide

https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model do not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and custo

junit.org

 

'Java & Spring > Spring' 카테고리의 다른 글

테스트코드 작성에 사용되는 메서드 및 애노테이션(1)  (0) 2024.09.23
47일차 - Controller 테스트  (0) 2024.09.11
JWT 구현 및 사용  (0) 2024.09.09
37일차 - Spring강의(JPA Audting)  (0) 2024.09.04
31일차 - Spring강의(Entity 연관 관계)  (0) 2024.08.27
'Java & Spring/Spring' 카테고리의 다른 글
  • 테스트코드 작성에 사용되는 메서드 및 애노테이션(1)
  • 47일차 - Controller 테스트
  • JWT 구현 및 사용
  • 37일차 - Spring강의(JPA Audting)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 이론공부 N
        • 정보처리기사 N
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java two-pointer
    java 에라토스테네스의 체
    프로그래머스 java 기초 트레이닝
    자료구조
    java
    개발로드맵
    프로그래머스 java 기초트레이닝
    java 제어자
    java enhance switch
    java 세수의합
    Java this
    데이터 타입
    Java 생성자
    java 메서드
    java arrays.copyofrnage()
    java 유클리드 호제법
    java기초
    java super
    java 멤버
    데이터 크기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
46일차 - 테스트 코드 애노테이션
상단으로

티스토리툴바