JUnit5 - Part.2

Noah·2022년 7월 20일
0

Application Test Study

목록 보기
2/6

지난 포스팅 JUit5-Part1에 이어서 JUnit-Part2입니다.

Assertion

  • 테스트 케이스의 수행 결과를 판별
  • Jupiter Assertions는 static 메소드 이다.
  • 종류
    1. assertAll(executables...)
      • 매개변수로 받는 모든 테스트 코드를 한번에 실행
      • 오류가 나도 끝까지 실행한 뒤 모아서 출력
    2. assertThrows(expectedType, executable)
      • 예외 발생을 확인하는 테스트
      • executable 로직이 실행되는 도중 expectedType 에러를 발생하는지 확인
    3. assertTimeout(duration, executable)
      • 특정 시간 안에 실행이 완료되는지 확인
      • duration : 특정 시간
      • executable : 테스트할 로직
    4. assertEquals(expected, actual)
      • actual이 expected랑 같은 값을 가지는지 확인하는 메서드
    5. assertNotNull(actual)
      • actual이 null인지 확인하는 메서드
    6. assertTrue(boolean)
      • 주어진 조건이 참인지 확인하는 메서드

Assumption

  • 전제문이 true라면 실행, false라면 종료
  • 종류
    • assumeTrue(조건) : false일 때 이후 테스트 전체가 실행되지 않음
    • assumingThat(조건, 테스트) : 조건이 false이면 전달받은 테스트만 실행되지 않음

태깅과 필터링

  • 테스트 그룹을 만들고 원하는 테스트 그룹만 테스트를 실행할 수 있음

  • @Tag 사용

    • 테스트 메소드에 태그 추가 가능
    • 하나의 테스트 메소드에 여러 태그를 사용 가능
  • 추가로, 로컬 환경에서만 실행할 태그와, CI 단계에서 테스트할 메서드들을 나누어서 사용할 수 있음

  • 커스텀 태그 만들기

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Tag("fast")
    @Test
    public @interface FastTest {
    }

테스트 반복하기

  • @RepeatedTest
    • 특정 테스트를 반복시키고 싶을 때 사용하는 어노테이션
    • 반복 횟수와 반복 테스트 이름을 설정 가능
    • displayName, currentRepetition, totalRepetitions
    • RepititionInfo 타입의 인자를 받을 수 있음
  • @ParameterizedTest
    • 테스트에 여러 다른 매개변수를 대입해가며 반복 실행할 때 사용하는 어노테이션

테스트 인스턴스

  • JUnit은 테스트 메소드 마다 새로운 테스트 인스턴스를 만듬
    • 테스트 메소드를 독립적으로 실행하여 예상하지 못한 부작용 사전 방지
  • @TestInstance(PER_CLASS)
    • 테스트 클래스당 인스턴스를 하나로 만들어 사용하는 어노테이션
    • 경우에 따라, 테스트 간에 공유하는 모든 상태를 @BeforeEach 또는 @AfterEach에서 변경해야함
    • @BeforeAll 또는 @AfterAll를 인스턴스 메소드 또는 인터페이스에 정의한 default 메소드로 정의 가능함

테스트 순서

  • 테스트 메소드는 정확한 순서가 없음
  • 순서를 지정하고 싶으면 @TestInstance(Lifecycle.PER_CLASS)와 함께 @TestMethodOrder 사용
    • @TestMethodOrder 인자 종류
      • MethodOrderer MethodName : 메소드 명
      • DisplayName : @DisplayName 값으로 오름차순
      • OrderAnnotation : @Order(n) 어노테이션 순서
      • Random : 랜덤
      • 커스텀 사용을 원할 시
        • MethodOrderer 구현체를 설정해서 사용

JUnit 설정 파일 만들기

  • 클래스패스 루트 (src/test/resources/)에 넣어두기
  • 테스트 인스턴스 라이프 사이클 설정
    • junit.jupiter.testinstance.lifecycle.default = per_class
  • 확장팩 자동 감지 기능
    • junit.jupiter.extensions.autodetection.enabled = true
  • @Disabled 무시하고 실행
    • junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition
  • 테스트 이름 표기 전략 설정
    • junit.jupiter.displayname.generator.default = \org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores
profile
BackEnd 개발자가 되기 위해 공부중입니다!

0개의 댓글