Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Keycloak 17.0.1
- aws
- 스프링
- Flutter
- vue
- 알고리즘
- jsp
- json
- 현장학습
- REACT
- 메서드
- arraylist
- jpa
- keycloak
- JavaScript
- spring
- 인텔리제이
- nginx
- gradle
- SpringBoot
- Docker
- ES6
- vue.js
- 맥길대학교
- lightsail
- java
- jQuery
- 글로벌
- 자바스크립트
- 에러
Archives
- Today
- Total
korean IT student
JUnit 5 란? 본문
junit 5 공식 문서를 참고하여 정리하였습니다.
What is JUnit 5?
- 문서에서 JUnit 5는 세 가지 다른 하위 프로젝트의 여러 모듈로 구성됩니다.
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
- JUnit Platform : 테스트를 발견하고 테스트 계획을 생성하는 TestEngine API를가지고 있습니다. Platform은 TestEngine을 통해서 테스트를 발견하고 ,실행하고 ,결과를 보고합니다.
- JUnit Jupiter : TestEngine의 실제 구현체는 별도 모듈입니다. 모듈 중 하나가 jupiter-engine입니다. 이 모듈은 jupiter-api를 사용해서 작성한 테스트 코드를 발견하고 실행합니다. Jupiter API는 JUnit 5에 새롭게 추가된 테스트 코드용 API로서, 개발자는 Jupiter API를 사용해서 테스트 코드를 작성할 수 있습니다
- JUnit Vintage : 기존에 JUnit 4 버전으로 작성한 테스트 코드를 실행할 때에는 vintage-engine 모듈을 사용합니다.
JUnit 5를 실행하기 위해서는 자바 8 이상이 필요합니다.
Annotations
- JUnit Jupiter는 테스트와 확장된 기능을 제공하기 위해 여러가지 어노테이션들을 제공한다
@Test | 테스트 메소드임을 알림 Junit 4와는 다르게 속성을 정의 X 이는 Jupiter에선 이미 해당 어노테이션들이 존재하기 때문 |
@ParameterizedTest | 여러가지 매개변수를 통해 다양한 테스트 진행 |
@RepeatedTest | 반복 횟수만큼 테스트를 진행 |
@TestFactory | 동적 테스트를 위한 테스트 팩토리 |
@TestTemplate | 일반 테스트가 아닌 테스트 케이스의 템플릿 |
@TestMethodOrder | 테스트 메서드의 실행 순서를 구성하는데 사용(Junit 4의 @FixMethodOrder와 유사) |
@TestInstance | 테스트 인스턴스 생명주기를 구성하는데 사용 |
@DisplayName | 테스트 클래스 혹은 메소드에 대한 이름을 선언 |
@DisplayNameGeneration | 테스트 클래스에 대한 Display name generator를 선언 |
@BeforeEach | 현재 클래스에서 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory가 적힌 각각의 메소드들 보다 먼저 실행 (JUnit 4의 @Before와 동일) |
@AfterEach | 현재 클래스에서 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory가 적힌 각각의 메소드들 보다 나중에 실행 (JUnit 4의 @After와 동일) |
@BeforeAll | 현재 클래스에서 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory가 적힌 모든 메소드들 보다 먼저 실행 (JUnit 4의 @BeforeClass와 동일) |
@AfterAll | 현재 클래스에서 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory가 적힌 모든 메소드들 보다 나중에 실행 (JUnit 4의 @AfterClass와 동일) |
@Nested | 중첩된 테스트 클래스임을 알림 각 클래스의 테스트 인스턴스 생명주기를 사용하지 않는 한 @BeforeAll과 @AfterAll 메소드는 사용 X |
@Tag | 테스트 필더링을 위한 테그를 선언하는데 사용 |
@Disabled | 테스트 클래스 혹은 메소드를 비활성하는데 사용(JUnit 4의 @Ignore와 유사) |
@Timeout | 주어진 시간을 초과할 경우, 테스트 실패를 나타내기 위해 사용 |
@ExtendWith | 확장을 선언적으로 등록하는데 사용 |
@RegisterExtension | 필드를 통해 프로그래밍 방식으로 확장을 등록하는데 사용 |
@TempDir | 필드 주입 또는 매개변수 주입을 통해 임시 디렉토리를 제공하는데 사용 |
Assertions
- JUnit Jupiter comes with many of the assertion methods that JUnit 4 has and adds a few that lend themselves well to being used with Java 8 lambdas. All JUnit Jupiter assertions are static methods
- Assertions는 만약 성공하지 않으면 테스트를 실패처리를 하기 위해서 사용합니다.
@Test
void testAssertions() {
// 기본
assertEquals(2, calculator.add(1,1));
assertEquals(5, calculator.mul(2,5), "실패 메시지(optional)");
// 그룹
// assertion Group은 JUnit5에 추가된 기능으로 동시에 Assertion 구문을 실행시킬 수 있는 그룹을 만드는 것
assertAll(() -> assertEquals(3, calculator.sub(5,2)),
() -> assertEquals(1, claculator.div(5,5)));
// 의존
// 코드 블럭안에서 만약 assertion 구문이 실패하면 아래 순차에 있는 코드는 실행되어지지 않습니다.
assertAll(() -> {
assertAll(() -> assertTrue(),
() -> assertTrue());
},
// 앞의 functional 코드에 상관없이 실행됩니다. 즉, 독립적으로 실행됩니다.
() -> {
assertAll(() -> assertEquals(),
() -> assertEquals());
});
// 예외
// exception이 발생할 수 있는 부분을 람다식을 이용하여 감쌈으로써 exception이 발생하는 지점을 특정하여 테스트가 가능
Exception e = assertThrows(ArithmeticException.class, () -> calculator.div(1, 0));
assertEquals("/ by zero", e.getMessage());
// 제한시간
assertTimeout(ofMinutes(2), () -> {
// 2분 미만의 로직만 통과
});
}
Assumptions
- 특정 상황에서만 test문을 실행하고자 할때, 반대로 특정 상황에서만 실행하지 않고자할 때 사용하는 키워드
@Test
void testOnlyOnDev() {
assumeTrue("DEV".equals(System.getenv("ENV")));
DEV 환경에서만 테스트할 코드;
}
@Test
void testAllEnv() {
assumeTrue("DEV".equals(System.getenv("ENV")),
() -> {
DEV 환경에서 테스트할 코드;
});
모든 환경에서 테스트할 코드;
}
[참고]
- https://junit.org/junit5/docs/current/user-guide/#overview
'back-end > SPRING' 카테고리의 다른 글
spring - banner 변경법 (0) | 2022.04.21 |
---|---|
동적 프록시 기술 - 1 (0) | 2021.12.15 |
SpringBoot - vue.js 연동 및 gradle 빌드 및 실행 (0) | 2021.03.02 |
SpringBoot (JPA)- gradle 설정, mariaDB 연동 및 테스트 (0) | 2021.02.28 |
SpringBoot - tomcat(spring profile 호출 방법) (0) | 2021.02.25 |
Comments