티스토리 뷰
1 주차 미션을 마무리하고 다른 분들의 코드를 리뷰하면서 테스트 코드에서 다양한 기능을 제공한다는 것을 배울 수 있었다. 그래서 이번 기회에 어떠한 기능들을 제공하는지 정리해보려고 한다.
JUnit 과 AssertJ
테스트 코드를 작성할 때 우리는 JUnit 과 AssertJ 에서 제공하는 기능 둘 다 사용한다.
그렇기에 우선 JUnit 과 AssertJ 에 대해서 알아보자.
- JUnit : 자바에 구축된 자동화 테스트가 가능한 프레임워크
- AssertJ : 자바 테스트에서 유창하고 풍부한 assertions를 작성하는 데 사용되는 오픈소스 라이브러리
어떻게 사용하는데? 생각할 수 있으니까 우선 간단한 예시를 보자.

@Test 와 같은 애노테이션은 JUnit 에서 제공하고, assertThat 과 같은 테스트 코드를 AssertJ에서 제공한다.
🤔 뭐하러 둘로 나눴어 하나로 만들지
그렇다면 왜 두 가지로 나눠서 제공할까? 하나로 제공하면 안 될까?
사실 JUnit 에서는 @Test 와 같은 애노테이션뿐만 아니라 실제로 테스트 코드 API 도 제공한다.

그런데 강의를 듣거나 다른 사람들의 코드를 보면 대부분 AssertJ 를 사용한다.

심지어 JUnit5 공식 문서에서 까지 서드 파티 라이브러리인 AssertJ 의 사용을 권장하고 있다.
왜 다들 JUnit 에서 제공하는 코드가 아닌 AssertJ 를 사용할까?
이에 대한 설명은 잘 설명되어 있는 글이 있어서 링크로 소개하겠다.
이후 이어지는 글에서는 AssertJ 의 기능에 대한 설명은 생략하겠다.
AssertJ를 사용하는 이유
IntelliJ에서 테스트코드를 작성할 때, Assertions 키워드를 작성하면 자동완성 기능으로 두 가지를 추천해준다. 하나는 org.junit.jupiter.api.Assertions이고, 하나는 org.assertj.core.api.Assertions이다. 강의를 듣
xxeol.tistory.com
AssertJ vs. JUnit
스터디에서 대니스가 말씀해주시길, JUnit 내에 있는 Assertions보다는 AssertJ를 많이 사용한다고 말씀해주셨다. 그래서 이번엔 이 두 개의 차이점을 정리해보려고 한다. 해당 내용은 다음 링크를 번
kkoon9.tistory.com
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
AssertJ vs. JUnit
스터디에서 대니스가 말씀해주시길, JUnit 내에 있는 Assertions보다는 AssertJ를 많이 사용한다고 말씀해주셨다. 그래서 이번엔 이 두 개의 차이점을 정리해보려고 한다. 해당 내용은 다음 링크를 번
kkoon9.tistory.com
[JUnit5] JUnit5 구성, 어노테이션, Assertions 정리
[JUnit5] JUnit5 구성, 어노테이션, Assertions 정리
JAVA 8 버전부터 사용 가능참고 사이트 https://steady-coding.tistory.com/349JUnit5는 JUnit Platform, JUnit Jupiter, JUnit Vintage가 결합한 형태JUnit PlatformJVM에서 테스트
velog.io
[JUnit] JUnit5 사용법 - 기본 - Heee's Development Blog
[JUnit] JUnit5 사용법 - 기본 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
https://programmer-ririhan.tistory.com/391
@ParameterizedTest에도 각각의 이름을 부여할 수 있다??
로또 미션 2단계 코드 리뷰에서 다음과 같은 리뷰를 받았다. 처음에는 진짜 띠용?? 이었다. 😨 이걸 어떻게 검색해봐야하지..? 하는 고민이 들었었다. 그러다 크루들과 로또 미션 코드 회고를 할
programmer-ririhan.tistory.com
'개발 스토리' 카테고리의 다른 글
| 원시값 포장에 대해 알아보자! (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 |
- Total
- Today
- Yesterday
- 분산락
- JWT
- 토스 NEXT 후기
- 우아한테크코스 후기
- 코루틴
- 우테코 6기
- 토스 next 2025
- 우아한테크코스 6기
- Cache Stampede
- 커넥션 데드락
- 게임개발
- 파이썬
- 우아한테크코스
- 토스 2025 NEXT
- stoplight
- 토큰
- 6기
- 알고리즘
- 자바
- 캐시 스템피드
- 우아한테크코스 자소서
- Assertions
- 우테코 준비
- 우테코 프리코스
- redis
- 우테코
- API 지연
- 토스 백앤드 합격
- 레디스
- 토스 합격 후기
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |