[JUnit5] 테스트 메서드 그룹화/실행 순서 (@Nested, @TestMethodOrder)공부/Junit2023. 8. 26. 15:36
Table of Contents
반응형
목차
@Nested 사용하여 테스트 그룹화
- simple 하게 내부 클래스 선언
- @Nested Annotation 추가하면 됨
- 그룹화할 테스트 메서드를 이동
사용 예시
@ActiveProfiles("test")
@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
class RestControllerTest {
// .. 테스트 작성
@Nested
@DisplayName("계좌 입금 테스트")
@TestMethodOrder(MethodOrderer.MethodName.class)
class AccountDeposit {
// .. 테스트 작성
}
}
Controller, Service 테스트시 관련 클래스를 그룹화하여 가독성 향상할 수 있었다
테스트 메서드명 기준으로 정렬하여 실행
- 테스트 메서드 이름 순으로 오름차순 정렬
- @TestMethodOrder(MethodOrderer.MethodName.class) 추가
사용예시
@Nested
@DisplayName("테스트 메서드명 기준으로 정렬한다")
@TestMethodOrder(MethodOrderer.MethodName.class)
class OrderByMethodName {
@DisplayName("testC")
@Test
void testC() {
// ..
}
@DisplayName("testB")
@Test
void testB() {
// ..
}
@DisplayName("testA")
@Test
void testA() {
// ..
}
}
@Order Annotation
- 기본 오름차순 정렬
- value는 int값만 받는다
- @Order() value를 설정하지 않을 경우 Integer.MAX_VALUE 할당 되어 우선 순위가 최하가 된다
- @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 추가
사용 예시
@Nested
@DisplayName("@Order 메서드로 실행 순서를 결정한다")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class OrderTestMethod {
@DisplayName("testC")
@Test
@Order(2)
void testC() {
// ..
}
@DisplayName("testB")
@Test
@Order(3)
void testB() {
// ..
}
@DisplayName("testA")
@Test
@Order(1)
void testA() {
// ..
}
}
@DisplayName 기준으로 정렬하여 실행
- @TestMethodOrder(MethodOrderer.DisplayName.class) 추가
- API 확인시 Comparator.comparging() 을 사용하여 @DisplayName에 표기된 String 값을 기준으로 정렬
사용예시
@Nested
@DisplayName("DisplayName 기준으로 정렬한다")
@TestMethodOrder(MethodOrderer.DisplayName.class)
class OrderByDisplayName {
@DisplayName("testC")
@Test
void testC() {
// ..
}
@DisplayName("testB")
@Test
void testB() {
// ..
}
@DisplayName("testA")
@Test
void testA() {
// ..
}
}
랜덤으로 테스트 메서드 실행하기
- @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 추가
- 매 테스트마다 실행 순서가 랜덤
사용예시
@Nested
@DisplayName("순서가 랜덤으로 테스트 메서드 실행된다")
@TestMethodOrder(MethodOrderer.Random.class)
class OrderByRandomName {
@DisplayName("testC")
@Test
void testC() {
// ..
}
@DisplayName("testB")
@Test
void testB() {
// ..
}
@DisplayName("testA")
@Test
void testA() {
// ..
}
}
1회차 실행
2회차 실행
테스트 실행시 순서가 달라지는 것을 확인 가능하다
참고
반응형
'공부 > Junit' 카테고리의 다른 글
JUnit5 Assertions, Assumptions (0) | 2023.08.11 |
---|---|
[JUnit] JUnit4, JUnit5 어노테이션 비교 (생명주기, ParameterizedTest, Suite 등등) (0) | 2023.08.11 |
@leejinwoo1126 :: 천천히 하나씩
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!