티스토리 뷰
JUnit이란?
- JUnit 은 Java 진영의 대표적인 단위 테스트 프레임워크입니다.
- 어노테이션을 기반으로 테스트를 지원하며 스프링부트 프로젝트의 경우 기본적으로 의존성이 추가되어 있습니다.
- JUnit 5는 크게 세 가지 모듈로 이루어져 있습니다.
- JUnit Platform은 테스트를 발견하고 테스트 계획을 생성하는 TestEngine API를 지원해줍니다. 테스트를 실행하기 위한 뼈대라고 볼 수 있습니다.
- JUnit Jupiter는 TestEngine API 구현체로 개발자가 테스트 코드를 작성할 때 사용되며 테스트 코드를 발견하고 실행하는 역할을 수행합니다.
- JUnit Vintage는 JUnit 이전 버전은 3, 4와의 호환성을 위한 모듈입니다.
주요 어노테이션
LifeCycle Annotation
@BeforeAll
- 해당 클래스에 위치한 모든 테스트 메소드 실행 전에 딱 한 번 실행되는 메소드
@AfterAll
- 해당 클래스에 위치한 모든 테스트 메소드 실행 후에 딱 한 번 실행되는 메소드
@BeforeEach
- 각 테스트 메소드들이 시작되기 전에 실행되는 메소드
@AfterEach
- 각 테스트 메소드들이 시작된 후 실행되는 메소드
--Each 메소드의 경우 매 테스트 메소드마다 새로운 클래스를 생성(new) 합니다.
- 위와 같이 라이프사이클 어노테이션을 테스트 메소드와 함께 실행해보았습니다.
- 가장 먼저 beforeAll이 한 번 실행되고 각 테스트 실행 전에 beforeEach, 실행 후에 afterEach가 실행되고 마지막에 afterAll이 한 번 실행되는 것을 볼 수 있습니다.
- 더불어 @Disabled 어노테이션이 붙은 테스트 케이스는 라이프사이클 어노테이션도, 테스트 메소드도 실행되지 않고 무시되는 것을 확인할 수 있습니다.
Annotation
@Test
- 테스트 메소드라는 것을 명시해주는 어노테이션
@Disabled
- 테스트를 하지 않을 메소드에 붙여주는 어노테이션입니다.
- 테스트 결과에서 테스트를 진행하지 않았다고 표시가 됩니다.
@DisplayName
- IDE나 빌드툴에서 결과값으로 기본적으로 테스트 메소드명이 노출되는데 이러한 테스트명을 표현할 수 있게 해주는 어노테이션입니다.
- 공백, Emoji, 특수문자 등을 모두 지원해주기 때문에 보다 직관적으로 테스트명을 지정해줄 수 있습니다.
@RepeatedTest
- 특정 테스트를 반복하여 성능적인 이슈를 확인할 때 사용하는 어노테이션입니다.
- displayName, currentRepetition, totalRepetitions를 이용하면 각 반복마다 테스트명을 커스텀하게 출력할 수도 있습니다.
@ParameterizedTest
- 테스트에 여러 다른 매개변수를 대입해가며 반복 실행할 때 사용하는 어노테이션입니다.
- 여러 개의 매개변수는 @CsvSource 어노테이션을 이용해 value값으로 넣을 수 있습니다. {"input", "expected"} 의 형태로 기본 구분자는 "," 입니다.
- delimiter 값으로 구분자를 커스텀할 수도 있습니다.
- 이 외에도 매개변수로 null값을 주입해주는 @NullSource, 빈 값을 주입해주는 @EmptySource와 Enum 값에 대한 테스트용인 @EnumSource 등 여러 어노테이션이 지원됩니다.
Main Annotation
@SpringBootTest
- 통합 테스트 용도로 사용되며 @SpringBootApplication의 하위 Bean들을 스캔하여 로드합니다.
- Test용 Application Context를 만들어서 Bean에 추가하고 MockBean을 찾아서 교체하는 작업을 수행합니다.
@ExtendWith
- 메인으로 실행될 Class를 지정할 수 있습니다.
@WebMvcTest(Class명.class)
- 명시된 클래스만 로드하여 테스트를 진행합니다.
- 매개변수를 지정해주지 않으면 @Controller, @RestController, @RestControllerAdvice 등 컨트롤러와 연관된 Bean이 모두 로드됩니다.
- 스프링의 모든 Bean을 로드하는 @SpringBootTest 대신 컨트롤러 관련 코드만 테스트할 경우에 사용합니다.
@Mockbean
- 테스트할 클래스에서 주입받고 있는 객체에 대해 가짜 객체를 생성해주는 어노테이션입니다.
- 해당 객체는 실제 행위를 하지 않고 가짜 객체의 동작에 대해 정의하여 제어할 수 있습니다.
Assertions(단정문)
- 테스트 케이스의 수행 결과를 판별하는 메소드로써 모든 JUnit Jupiter Assertions는 static 메소드입니다.
- 수행된 결과가 isEqualTo() 의 결과와 같은지를 판별하여 테스트 통과 여부가 결정됩니다.
assertThat, assertAll, assertSoftly
- assertThat은 중간에 다른 결과값이 나오면 이후 테스트는 진행하지 않고 테스트를 종료합니다.
- assertAll은 모든 테스트 케이스를 진행한 후 실패한 테스트에 대한 예상값과 실제값을 출력해줍니다.
- assertSoftly도 assertAll과 마찬가지로 모든 테스트 케이스를 진행한 후 실패한 테스트에 대한 메시지를 출력해주지만 어디서 실패했는지 코드 라인의 위치까지 알려준다는 점에 차이가 있습니다.
참고 자료
반응형
'개발냥이 > 자바(Java)' 카테고리의 다른 글
[자바] multi project 구성해보기 (1) | 2024.02.25 |
---|---|
[자바] 비트 연산자 알아보기! (2) | 2023.10.05 |
[자바] Record 찍먹 (0) | 2023.08.08 |
[스프링부트] Logback 설정해보기 (1) | 2023.06.05 |
[자바] 제네릭의 와일드카드 & 공변성 뿌시기 (1) | 2023.05.28 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 해시맵
- BFS
- Comparator
- SQL
- 알고리즘
- 프로그래머스
- 스프링
- 자바
- CS
- 자바bfs
- JavaScript
- java
- 스프링부트
- 자바dp
- Nest
- Queue
- Algorithm
- DP
- 정렬
- 자바트리
- SQLD
- 자바스크립트
- 타입스크립트
- 백준
- dfs
- 이분탐색
- 형변환
- Spring
- 리액트
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함