본문 바로가기
JAVA

JUnit5

by e-pd 2020. 12. 5.

junit.org/junit5/docs/current/user-guide/

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model will not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and cus

junit.org

 

Junit이란?

  • 자바 프로그래밍 언어용 유닛 테스트 프레임 워크이다. 
  • 테스트 용도로 쓰이던 xUnit을 에릭 감마 (Erich Gamma) 와 켄트 벡(Kent Beck)이 Java에 포팅하였다.

ko.wikipedia.org/wiki/XUnitko.wikipedia.org/wiki/JUnit

 

Junit5의 구성

Junit5는 Junit Platform, Junit Jupiter, Junit Vintage로 구성

 

Junit Platform 

JVM위에서 테스트하기 위한 기본 기능을 수행

TestEngine API 가 정의

Junit Jupiter Junit5 테스트를 지원하기 위한 프로그래밍 모델과 확장 모델을 제공
Junit Vintage JUnit3 와 Junit4 기반 테스트를 지원한다.

 

Junit5 아키텍쳐

 

 

Junit5 architecture

 

nipafx.dev/junit-5-architecture-jupiter/

 

JUnit 5 Architecture or "What's Jupiter?" - nipafx

The JUnit 5 architecture promotes a better separation of concerns than JUnit 4 did. It also provides clear APIs for testers (Jupiter) and tools (Platform).

nipafx.dev

Java version

java 8 이상 

 

사용방법

1
2
3
4
5
6
7
8
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.6.2</version>
    <scope>test</scope>
</dependency>
 
cs

의존성 설정

 

1
2
testRuntime("org.junit.jupiter:junit-jupiter-engine:5.6.2")
 
cs

 

Annotaion

 

@Test 테스트 메서드임을 알린다
@DisplayName 테스트 클레스나 테스트 메서드의 커스텀 이름을 부여할 수 있다
@Disable

테스트가 동작하는데 제외 한다. 이전에 @Ignore과 동일하다

@BeforeEach

같은 클래스내에 test 메서드가 실행되기전에 실행된다.
이전의 @Before과 동일하다

@BeforeAll

같은 클래스 내의 모든 테스트 메서드 보다 먼저 시작된다.
이전의 BeforeClass와 동일
static 메서드여야한다

@AfterEach

같은 클래스내에 test 메서드가 실행되고 난후 실행된다.
이전의 @After과 동일하다

@AfterAll

같은 클래스 내의 모든 테스트 메서드 이후 시작된다.
이전의 @AfterClass와 동일
static 메서드여야한다

@Tag 테스트 필터링을 위한 태그 선언
@ExtendWith 사용자 정의 확장명을 등록하는데 사용
@Nested 테스트 클래스 안에서 Inner class를 정의하여 계층화 할 수 있다.
@fail 테스트를 fail 시킬 수 있다

 

Assertions

Junit에서 값 검증을 위한 assertion 기능을 제공한다. 

 

junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html

 

Assertions (JUnit 5.0.1 API)

Asserts that all supplied executables do not throw exceptions. If any supplied Executable throws an exception (i.e., a Throwable or any subclass thereof), all remaining executables will still be executed, and all exceptions will be aggregated and reported

junit.org

 

assertAll()

assertAll() 을 사용하여 Assertions를 그룹화 하여 사용할 수 있다.

 

1
2
3
4
5
6
7
8
@Test
    void assertAlls() {
        String[] animal = new String[]{"cow""dog"};
        assertAll("animal",
                () -> assertEquals(animal[0], "cow"),
                () -> assertEquals(animal[1], "dog")
        );
    }
cs

 

assertLinesMatch()

assertLinesMatch()를 사용하여 String에서 정규식을 적용해 특정값이 있는지 확인할 수 있다.

1
2
3
4
5
6
7
8
@Test
    void assertAlls() {
        String[] animal = new String[]{"cow""dog"};
        assertAll("animal",
                () -> assertEquals(animal[0], "cow"),
                () -> assertEquals(animal[1], "dog")
        );
    }
cs

 

assertThrows()

exception이 발생하는지 테스트를 할 수 있다.

 

1
2
3
4
5
  @Test
    public void errorTest() {
        assertThrows(NullPointerException.class, () -> userRepository.findById("NEMO"));
    }
 
cs

 

'JAVA' 카테고리의 다른 글

Java 코딩의 기술-4  (0) 2020.12.06
Java 코딩의 기술-3  (0) 2020.12.05
제어문  (0) 2020.12.05
연산자  (0) 2020.11.22
자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.17