문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
|
wiki:java:junit:junit5 [2022/04/26 17:59] dhan 만듦 |
wiki:java:junit:junit5 [2023/01/13 18:44] (현재) |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| - | ==== 개요 ==== | + | |
| + | ===== 개요 | ||
| * JUnit Platform : 테스트를 실행해주는 런처 제공, TestEngine API 제공 | * JUnit Platform : 테스트를 실행해주는 런처 제공, TestEngine API 제공 | ||
| * Jupiter: TestEngine API 구현체로 JUnit 5를 제공 | * Jupiter: TestEngine API 구현체로 JUnit 5를 제공 | ||
| * Vintage: JUnit4와 3을 지원하는 TestEngine 구현체 | * Vintage: JUnit4와 3을 지원하는 TestEngine 구현체 | ||
| - | + | ===== 기초 | |
| - | ==== 기초 ==== | + | |
| * @Test | * @Test | ||
| * @BeforeAll | * @BeforeAll | ||
| 줄 15: | 줄 15: | ||
| - | ==== 테스트 이름 표기하기 ==== | + | ===== 테스트 이름 표기하기 ===== |
| + | * 일반적으로 테스트 메소드명은 camel case가 아닌 ' | ||
| + | |||
| + | * @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) | ||
| + | * 클래스명에 붙는 애노테이션 | ||
| + | * ' | ||
| + | |||
| + | * @DisplayName(" | ||
| + | * 메소드명에 붙는 애노테이션 | ||
| + | * 한글, 이모지 사용 가능 | ||
| + | |||
| + | ===== Assertion ===== | ||
| + | ^ 테스트 케이스 | ||
| + | | 실제 값이 기대한 값과 같은지 확인 | ||
| + | | 값이 null이 아닌지 확인 | ||
| + | | 다음 조건이 참(true)인지 확인 | ||
| + | | 모든 확인 구문 확인 | ||
| + | | 예외 발생 확인 | ||
| + | | 특정 시간 안에 실행이 완료되는지 확인 | ||
| + | |||
| + | 대안으로 AssertJ, Hemcrest, TGruth라이브러리도 사용 가능 | ||
| + | |||
| + | ===== Assumption(조건에 따라 테스트 실행하기) ===== | ||
| + | 조건을 만족하면 아래의 테스트를 수행 | ||
| + | 조건을 만족하지 않으면 바로 종료(테스트를 수행하지 않으므로 성공도 실패도 아닌 Skip 상태임) | ||
| + | |||
| + | assumingThat를 사용하여 조건과 executable을 동시에 사용할 수도 있음 | ||
| + | |||
| + | @EnabledOnOS, | ||
| + | |||
| + | |||
| + | |||
| + | ===== Test 태깅, 필터링 ===== | ||
| + | <code bash> | ||
| + | $> ./mvnw test -P ci | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== 커스텀 태그 ===== | ||
| + | 애노테이션을 생성해서 활용하자 | ||
| + | |||
| + | ===== 테스트 반복하기 ===== | ||
| + | 매개변수를 넣어서 계속 반복할 수 있다. | ||
| + | 하고 싶은 것은 모두 가능할 것으로 판단된다. | ||
| + | |||
| + | ===== 테스트 인스턴스 ===== | ||
| + | 기본 전략은 테스트 마다 인스턴스가 생성됨 <- 테스트간의 의존성을 없애기 위함 | ||
| + | @TestInstance(TestInstance.Lifecycle.PER_CLASS) <- 하나의 인스턴스로 진행 | ||
| + | @BeforeAll, @AfterAll 메소드가 static일 필요가 없음 | ||
| + | |||
| + | ===== 테스트 순서 ===== | ||
| + | 기본 전략은 각 메소드는 독립적으로 구동되어야 하므로, 순서에 크게 신경을 쓰고 있지 않음 | ||
| + | 유즈케이스 테스트를 하려면 테스트의 순서도 필요함 | ||
| + | @TestMethodOrder(MethodOrderer.OrderAnnotation.class) | ||
| + | @Order(1), @Order(2)... 순서가 같아도 오류는 나지 않음 | ||
| + | |||
| + | ===== 설정 파일 ===== | ||
| + | JUnit5에서 사용 가능 | ||
| + | src/ | ||
| + | |||
| + | ===== JUnit5 확장 모델 ===== | ||
| + | 이전 JUnit4, JUnit3보다 단순해 짐 | ||
| + | @RunWith(Runner), | ||
| + | Extension | ||
| + | |||
| + | 선언적 | ||
| + | @ExtendWith(FindSlowTestExtension.class) | ||
| + | public class ... | ||
| + | |||
| + | 코딩으로 구현 | ||
| + | @RegisterExtension (static로 정의되어야 됨) | ||
| + | static FindSlowTestExtension | ||
| + | |||
| + | ===== JUnit5 마이그레이션 ===== | ||
| + | vintage 라이브러리를 추가해야 됨 | ||
| + | |||
| + | |||
| + | ===== Ref ===== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| - | ==== Ref ==== | + | ===== 예제 ===== |
| - | * https://junit.org/junit5/ | + | * [[wiki:java:junit:junit5: |
| {{tag> | {{tag> | ||