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
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바