목차 (클릭시 해당 목차로 이동)
JUnit5
세가지 모듈(JUnit Platform + JUnit Jupiter + JUnit Vintage)로 구성된 테스트 라이브러리로, Java 8이상부터 제공합니다.
JUnit Platform
테스트를 실행해주는 런처를 제공합니다.
- JVM에서 테스트를 하기 위한 기반 역할을 합니다.
- 테스트 프레임 워크를 개발하기 위한 API를 정의합니다.
(TestEngine API를 제공) - JUnit4 기반 실행 환경을 제공합니다.
JUnit Jupiter
- JUnit5에서 새롭게 탄생한 프로그래밍 모델과 확장 모델의 조합입니다.
- Jupiter 기반 테스트를 실행하기 위한 TestEngine을 제공합니다.
(TestEngine API의 구현체)
JUnit Vintage
- JUnit3, JUnit4 기반 테스트를 실행하기 위한 TestEngine을 제공합니다.
(TestEngine API의 구현체)
JUnit4 와의 차이점
1.
JUnit4는 junit 라이브러리만 정의해주면 되지만 JUnit5는 3개의 모듈로 나눠져 있습니다.
JUnit4 | JUnit5 |
All In One | JUnit Platform JUnit Jupiter JUnit Vintage |
2.
JUnit4 | JUnit5 |
Java 5 이상 | Java 8 이상 |
3. 어노테이션
제공하는 어노테이션에도 차이가 있습니다.
JUnit 5 | JUnit 4 | Features |
@Test (별도 속성 정의 불가) |
@Test | 테스트 메소드 정의 |
@BeforeAll | @BeforeClass | 클래스에 포함된 모든 테스트가 수행하기 전에 실행 |
@AfterAll | @AfterClass | 클래스에 포함된 모든 테스트가 수행한 후에 실행 |
@BeforeEach | @Before | 클래스에 포함된 각각의 테스트가 수행하기 전에 실행 |
@AfterEach | @After | 클래스에 포함된 각각의 테스트가 수행한 후에 실행 |
@Disable | @Ignore | 테스트 클래스 또는 메소드 distable 처리 |
@TestFactory | N/A | dynamic test를 위한 테스트 factory 메소드 |
@Nested | N/A | 클래스 안의 클래스를 선언 |
@Tag | @Category | 테스트 필터링 |
@ExtendWith | N/A | custom extension 등록 |
JUnit5 기능
@Test
해당 메서드가 테스트 메서드임을 나타냅니다.
@Test
void test(){
System.out.println("test");
}
assertEquals
assertEquals(x, y)
객체 x, y가 일치함을 확인합니다.
또한 세번째 파라미터로 실패시 message를 넣어줄 수 있습니다.
예시)
package ch4.assignment;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
public class JUnit5Test {
@Test
void test(){
assertEquals(1, 1);
}
}
assertAll
기존 JUnit4에서는 assert 메소드가 하나라도 실패하면 다음 assert를 실행하지 않았습니다.
하지만 JUnit5에서는 assertAll 메소드로 여러개의 assert를 실행하고 중간에 실패하더라도 모든 결과를 확인할 수 있도록 합니다.
@Test
void assertAllTest() {
int num = 10;
assertAll("assertAll test",
() -> assertEquals(15, num),
() -> assertEquals(13, num),
() -> assertEquals(10, num));
}
assertThrows
JUnit4에서 예외검증은 라이브러리를 이용했지만, JUnit5에서는 assertThrows를 제공합니다.
@Test
void assertThrowsTest() {
Exception exception = assertThrows(
IllegalStateException.class, () -> {
throw new IllegalStateException("message");
}
);
assertEquals("message", exception.getMessage());
}
테스트 전후 실행 어노테이션
- @BeforeAll : @Test 메소드들이 실행되기 전에 실행
- @BeforeEach : 각각의 @Test 메소드가 실행되기 전에 실행
- @AfterAll : @Test 메소드들이 실행된 후에 실행
- @AfterEach : 각각의 @Test 메소드가 실행된 후에 실행
주의
@BeforeAll 이나 @AfterAll을 사용할 때에는 static을 붙여주어야 합니다.
package ch4.assignment;
import org.junit.jupiter.api.*;
public class JUnit5Test {
@BeforeAll
static void beforeAll() {
System.out.println("BeforeAll");
}
@BeforeEach
void beforeEach() {
System.out.println("BeforeEach");
}
@Test
@DisplayName("테스트1")
void test1() {
System.out.println("Test1");
}
@Test
@DisplayName("테스트2")
void test2() {
System.out.println("Test2");
}
@AfterAll
static void afterAll() {
System.out.println("AfterAll");
}
@AfterEach
void afterEach() {
System.out.println("AfterEach");
}
}
'Web > Java' 카테고리의 다른 글
[Java] LinkedList, Stack, Queue (0) | 2021.07.07 |
---|---|
[Java] GitHub API를 이용한 대시보드 만들기 (2) | 2021.07.05 |
[Java] 제어문 (0) | 2021.07.05 |
[Java] 연산자 (2) | 2021.06.25 |
[Java] 자바 데이터타입, 변수 그리고 배열 (2) | 2021.06.10 |