1 주차 미션을 마무리하고 다른 분들의 코드를 리뷰하면서 테스트 코드에서 다양한 기능을 제공한다는 것을 배울 수 있었다. 그래서 이번 기회에 어떠한 기능들을 제공하는지 정리해보려고 한다.
JUnit 과 AssertJ
테스트 코드를 작성할 때 우리는 JUnit 과 AssertJ 에서 제공하는 기능 둘 다 사용한다.
그렇기에 우선 JUnit 과 AssertJ 에 대해서 알아보자.
- JUnit : 자바에 구축된 자동화 테스트가 가능한 프레임워크
- AssertJ : 자바 테스트에서 유창하고 풍부한 assertions를 작성하는 데 사용되는 오픈소스 라이브러리
어떻게 사용하는데? 생각할 수 있으니까 우선 간단한 예시를 보자.
@Test
와 같은 애노테이션은 JUnit 에서 제공하고, assertThat
과 같은 테스트 코드를 AssertJ에서 제공한다.
🤔 뭐하러 둘로 나눴어 하나로 만들지
그렇다면 왜 두 가지로 나눠서 제공할까? 하나로 제공하면 안 될까?
사실 JUnit 에서는 @Test
와 같은 애노테이션뿐만 아니라 실제로 테스트 코드 API 도 제공한다.
그런데 강의를 듣거나 다른 사람들의 코드를 보면 대부분 AssertJ 를 사용한다.
심지어 JUnit5 공식 문서에서 까지 서드 파티 라이브러리인 AssertJ 의 사용을 권장하고 있다.
왜 다들 JUnit 에서 제공하는 코드가 아닌 AssertJ 를 사용할까?
이에 대한 설명은 잘 설명되어 있는 글이 있어서 링크로 소개하겠다.
이후 이어지는 글에서는 AssertJ 의 기능에 대한 설명은 생략하겠다.
JUnit 이 제공하는 기능
그러면 이제 JUnit 이 제공하는 기능들에 대해 알아보자. 사실 모든 기능들은 공식 문서에 잘 설명되어 있다.
그래서 여기에서는 자주 사용하는 애노테이션들에 대해서만 설명하겠다.
@Test
가장 기본적인 애노테이션이다. 해당 애노테이션이 붙은 메서드는 테스트 메서드임을 선언한다.
해당 애노테이션이 있어야 테스트를 돌릴 수 있다.
@DisplayName
테스트 클래스 or 메소드의 사용자 정의 이름 선언하는 기능이다.
만약 해당 애노태이션이 없다면 테스트 이름은 메서드 이름으로 정의된다.
@BeforeEach, @AfterEach
@BeforeEach
는 모든 테스트 실행 전에 실행할 메서드를 지정해 준다.@BeforeEach
가 붙은 메서드는 각각의 테스트가 실행되기 이전에 호출된다.@AfterEach
도 있는데, 이 애노테이션이 붙은 메서드는 각각의 테스트가 실행된 이후에 호출된다.
@BeforeAll, @AfterAll
@BeforeAll
은 현재 클래스 실행 전 제일 먼저 실행할 메서드를 지정해 준다.- 모든 테스트가 실행되기 이전에 한 번 실행된다. 해당 메서드는
static
으로 선언되어야 한다. @AfterAll
은 현재 클래스의 모든 테스트가 수행된 이후에 실행될 메서드를 지정해준다.
@ParameterizedTest
매개변수를 받는 테스트를 작성할 때 @Test
대신 사용한다.
주로 @ValueSource
, @MethodSource
등 과 같이 사용된다. 예시는 아래에서 설명하겠다.
@ValueSource
- 하나의 매개변수를 통해 여러 값을 테스트하고 싶을 때 사용한다.
@ValueSource
의 소괄호()
안에ints
,strings
,bytes
등등 어떤 타입을 사용할 것인지 선언해 준 다음에 사용할 테스트들을 중괄호{}
로 건네주면 된다.- 리터럴 값만 테스트할 수 있다.
@ValueSource
는 하나의 값만 사용할 수 있다. 여러 값을 가지고 테스트하기 위해서는@MethodSource
를 활용해야 한다.
@MethodSource
- 두 가지 이상의 매개변수를 통해 여러 값을 테스트하고 싶을 때 사용한다.
- 테스트할 파라미터를
Stream<Arguments>
로 넘겨준다. 그 후@MethodSource
애노테이션 괄호 안에 해당 메서드 이름을 넣어주면 된다. - 리터럴값뿐만 아니라 List 와 같은 객체도 넘겨줄 수 있다.
@ParameterizedTest 각각의 이름 부여하기
원래 이전에는 테스트를 하면 테스트케이스에 대해선 어떤 요소가 들어가는지만 나왔다.
그런데 @ParameterizedTest 안에 메시지를 넣어주면 케이스에 맞는 메시지를 출력해 줄 수 있다.
어떤 요소들이 들어갈 수 있는지는 위 표에서 확인 가능하다.
🌐 Reference
[JUnit5] JUnit5 구성, 어노테이션, Assertions 정리
[JUnit] JUnit5 사용법 - 기본 - Heee's Development Blog
https://programmer-ririhan.tistory.com/391
'개발 스토리' 카테고리의 다른 글
원시값 포장에 대해 알아보자! (10) | 2023.10.30 |
---|---|
getter 를 지양해야하는 이유 (1) | 2023.10.28 |
[우테코 API] Assetions, NsTest 에 대해 알아보기 (1) | 2023.10.26 |
컬렉션 프레임워크(Collection Framework) 은 뭐지?? (1) | 2023.10.23 |
자바 스트림(Stream)이란 무엇이고 왜 쓰는건가? (0) | 2023.10.22 |