Spring | junit5

DoItDev·2021년 1월 25일
0
post-thumbnail

Junit5 이란 무엇인가?

Junit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다.
Junit은 테스트 주도 개발 면에서 중요하며
Sunit과 함께 시작된 XUnit이라는 이름의 유닛 테스트 프레임워크 계열의 하나이다.

Junit5 의 인텔리제이 설정

Junit5을 Gradle로 사용을 할 경우 인텔리제이에서 설정이 필요하다.
인텔리제이에서 프로젝트를 만들시 첫 세팅의 경우 전체 Gradle을 읽게 되어있다.
이부분을 인텔리제이 로 바꾸면 Test 할때 Test쪽 빌드만되게 된다.

인텔리제이설정

@DisplayName

@DisplayName 의 경우 전에는 함수에다가 Test함수 라는 한글 방식의 이름
으로 작성을 했으나 junit5로 넘어오면서 @DisplayName 이라는 함수를 통해서 사용을 하고 있다.

carbon (1)

@DisplayNameGeneration

junit4 로 된경우 함수에 언더스코어 표기법을 사용하고 있는데
버전업시킬시 @DisplayNameGeneration 를 사용하여 리팩토링 시킬 수 있다.

코드

carbon (2)

테스트의 생명주기

Junit5 에서 생명주기가 존재한다. 어노테이션으로 제공이된다.
@BeforeAll , @AfterAll , @BeforeEach , @AfterEach

코드

carbon

Test 함수에서의 생명주기

함수

Test 클래스에서의 생명주기

클래스

assertion : 전체 단정문

Junit 에서 단정문은 기본적인 것만 제공이된다.
추가적인 기능을 사용시 AssertJ , Hamcrest 추가하여 사용하도록 하자
Junit 에서 assertion 의 기능은 전체기능이 있다.
이번에 추가된 기능이기도 하다. 이전 버전에서는 assertion 에 실패를 할 경우 나머지
assertion 문이 실행이 되지 않았기 때문에 전체를 성공시키기 위해서 여러번 테스트를 수행하였다.
인자인 함수를 통하여 전달함으로 전체의 단정문을 한번에 평가를 한다.
단정문이 실패시 예외가 발생하면서 종료가 되고
성공시 success 가 된다.

코드

carbon

결과

단정문1

assertion : 예외

예외의 내부 상태를 검증하는 기능이 추가되었다.
전 버전에는 @Test 를 이용하여 기대하는 예외 기술하는 방식으로 테스트를 수행했기 때문에
단순하게 예외가 발생하는지 여부만 검증하는 형태였다.
단정문을 통하여 예외 발생을 검증하고 그 예외를 반환하여 예외의 상태를 검증이 가능하다
예외가 던져지지 않음을 검증하는 단정문도 추가가되었다. 특정한 코드 블록일때만 사용이 가능하고 있다는 존재만 생각하자

코드

carbon

assertion : 타임아웃 단정문

5버전에서는 타임아웃 관련한 기능이 추가가 되었다.
이전 버전에서도 가능은 하였다 @Rule 이나 @Test(timeout=2000L) 로는 가능하지만
assertion 문에서는 가능하지 못했기 때문에 작성을 한다.
데이터 생성 부분에서 제약조건을 걸 수 있기 때문에 유용하게 사용이 가능하다.

코드

carbon

결과

성공

실패

assertion : 전제문

특정 조건을 전제하고 테스트를 수행할 수 있다.
assumeTrue를 통해서 전제조건을 검증한 경우 이후 테스트 전체가 실해되지 않지만
assumeThat를 통해서 전제조건을 검증한 경우에는 해당하는 메소드이 파라미터로 전달된
코드만 실행되지 않고 이후 테스트는 정상적으로 수행
CI 와 같이 특정환경에서만 테스트를 진행하는 경우 사용 가능

코드

carbon (1)

@Nested : 개층화

테스트 클래스안에서 내부클래스(Inner 클래스)를 정의해
테스트를 계층화 할 수 있다.

코드

carbon (2)

@ParameterizedTest : 매개변수화 테스트

@ParameterizedTest 는 반복적으로 수행해야할 테스트의 데이터를 정의하는 어노테이션
반복문 , 조건문 등에서 수행이 가능하며 사용할 데이터와 코드가 분리되여 가동성면에서 뛰어나다
테스트하는 함수의 속성이 뚜렷하다
@ParameterizedTest 어노테이션을 선언을 한 테스트 함수에서 데이터를 지정하는 방식으로
테스트 데이터를 지정할 수 있다. @EmptySource , @NullSource 를 통하여 Null 이나 빈값을 전달할 수 있으며
@ValueSource 를 통하여 값을 전달이 가능하다. 파라미터 타입과 맞아야함으로 하나만 전달이 가능하다.
여러개를 전달할 경우 @CsvSource 를 사용하면된다. (@CsvFileSource , @EnumSource 또한 있다.)

코드

carbon

결과

결과1

코드

carbon (1)

결과

결과2

코드

carbon (2)

결과

결과3

코드

carbon (3)

결과

결과4

코드

carbon (4)

결과

결과5

코드

carbon (5)

결과

결과6

@Disabled

테스트를 수행할 수 없는 상황이 생겼을 경우 해당하는 테스트 코드에 어노테이션을 붙여주면 실행이 되지 않는다.
( 전체 실행 시 해당하는 함수가 실행이 되지 않는다 )

코드

carbon

결과

결과1

profile
Back-End Engineer

0개의 댓글