지난 포스팅 JUit5-Part1에 이어서 JUnit-Part2입니다.
Assertion
- 테스트 케이스의 수행 결과를 판별
- Jupiter Assertions는 static 메소드 이다.
- 종류
- assertAll(executables...)
- 매개변수로 받는 모든 테스트 코드를 한번에 실행
- 오류가 나도 끝까지 실행한 뒤 모아서 출력
- assertThrows(expectedType, executable)
- 예외 발생을 확인하는 테스트
- executable 로직이 실행되는 도중 expectedType 에러를 발생하는지 확인
- assertTimeout(duration, executable)
- 특정 시간 안에 실행이 완료되는지 확인
- duration : 특정 시간
- executable : 테스트할 로직
- assertEquals(expected, actual)
- actual이 expected랑 같은 값을 가지는지 확인하는 메서드
- assertNotNull(actual)
- 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