반응형
JUnit5 이란 ?
Java 개발자가 가장 많이 사용하는 테스팅 프레임워크로,
JAVA 8 버전부터 사용 가능하며 테스트 주도 개발(TDD, Test Driven Development)을 위해 사용됩니다.
- 요구사항을 검증하는 테스트 케이스 작성
- 테스트 통과를 위한 코드 작성 이후 작성된 테스트 케이스 실행
- 테스트 케이스 오류가 나는 부분을 찾아 리팩토링하여 실제 개발 코드에 적용
JUnit 모듈 구성
JUnit 5는 크게 3개의 요소로 구성되어 있습니다.
JUnit Platform
테스트를 발견하고 계획을 생성하고 결과를 보고하는 TestEngine 인터페이스를 정의합니다.
테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API를 제공
JUnit Jupiter
Junit5 TestEngine의 실제 구현체로,
JUnit 5 기반의 테스트를 위한 테스트 API와 실행 엔진(TestEngine)을 플랫폼에 제공합니다.
JUnit Vintage
TestEngine에서 Junit3 및 Junit4 기반 테스트를 실행하기 위한 기능을 제공
JUnit5 어노테이션
JUnit5 어노테이션 | 설명 | JUnit4 |
@Test | 테스트 메서드임을 선언 ( 정적 테스트 ) | @Test |
@ParameterizedTest | 매개변수를 받는 테스트 작성 | |
@RepeatedTest | 반복되는 테스트 작성 | |
@TestFactory | 동적으로 테스트를 사용 | |
@TestInstance | 테스트 클래스의 생명주기 설정 | |
@TestTemplate | 공급자에 의해 여러 번 호출될 수 있도록 설계된 테스트 케이스 템플릿임을 나타낸다. | |
@TestMethodOrder | 테스트 메서드 실행 순서 구성에 사용 | |
@DisplayName |
테스트 클래스 or 메서드의 사용자 정의 이름 선언 | |
@DisplayNameGeneration |
이름 생성기 선언 예를 들어, '_'를 공백 문자로 치환해주는 생성기가 있다. ( new_test -> new test ) |
|
@BeforeEach |
모든 테스트 실행 전에 실행할 테스트 | @Before |
@AfterEach |
모든 테스트 실행 후에 실행할 테스트 | @After |
@BeforeAll | 현재 클래스의 모든 테스트 메서드를 실행하기 전에 한번만 실행 ( static으로 선언 ) |
@BeforeClass |
@AfterAll | 현재 클래스의 모든 테스트 메서드를 실행한 후에 한번만 실행 ( static으로 선언 ) | @AfterClass |
@Nested | 클래스를 정적이 아닌, 중첩 테스트 클래스임을 나타낸다. | |
@Tag | 클래스 or 메서드 레벨에서 태그 선언할 때 사용. | |
@Disabled | 이 클래스나 테스트를 사용하지 않음을 표시. | @Ignore |
@Timeout | 테스트 실행 시간 선언 후 초과되면 실패하도록 설정 | |
@ExtendWith | 확장을 선언적으로 등록할 때 사용 | |
@RegisterExtension | 필드를 통해 프로그래밍 방식으로 확장을 등록할 때 사용 | |
@TempDir | 필드 주입 or 매개변수 주입을 통해 임시 디렉토리 제공하는데 사용 |
JUnit5 Assertions 메서드
JUnit5 Jupiter Assertions 메소드는 모두 static 메소드라는 특징을 가집니다.
메서드 | 설 명 |
assertEquals() | 두 값을 비교하여 일치 여부 판단 |
assertNotEquals() | 예상 값과 실제 값이 다름을 확인 |
assertArrayEquals() | 예상 배열과 실제 배열이 동일한지 확인한다. 배열이 같지 않으면 마지막 인자로 들어간 메세지가 출력된다. |
assertTrue() & assertFalse() | 특정 조건이 참인지 거짓인지 확인한다. |
assertNotNull() & assertNull | 객체가 Null이 아닌지 & Null인지 테스트 |
assertNotSame() & assertSame() | 두 값이 동일한 객체를 참조하지 않는지 & 참조하는지 확인 |
fail() | 무조건 실패 |
assertThat() | 첫번째 파라미터에 비교대상 값, 두번째 파라미터에 비교 로직이 담긴 Matcher를 받는다. |
assertAll() | 정의한 메서드들을 모두 확인. 한 메소드에 assert함수를 여러개 선언 후 테스트를 진행할 시 상단 assert함수에서 오류가 발생하면 그 밑 함수들을 실행되지가 않는다. assertAll()로 해당 함수들을 묶을 시 중간에 assert함수가 실행이 되지 않더라도 assert의 모든 함수를 실행할 수 있다. |
assertIterableEquals() | 두 Iterable이 동일하면 True |
assertArrayEquals() |
두 Array가 동일하면 True |
assertLinesMatch() | 예상 목록이 실제 목록과 일치하는지 확인 |
assertThrows() | 예상한 예외가 발생하면 True 첫 번째 인자는 확인할 예외 클래스 두 번째 인자는 테스트하려는 코드 |
assertDoesNotThrows() | 에러가 발생하지 않으면 True |
assertTimeout() | 특정 시간 안에 실행이 끝나는지 확인 시간 내 실행이 끝나는지 여부 확인 시 : assertTimeout 지정한 시간 내 끝나지 않으면 바로 종료 : assertTimeoutPreemptivel |
AssertJ의 assertThat() 메서드와 함께 사용하기 좋은 메서드
메서드 | 설 명 |
isEqualsTo | 객체가 서로 같은 값을 가지고 있는지 비교한다. 같음녀 True |
isSameAs | 객체가 서로 같은 주소를 참조하는지 확인한다. 같으면 True |
isInstanceOf | 타입을 비교하여 같으면 True. |
isNotEmpty() | 비어 있지 않으면 True |
contains() | 지정한 값을 포함하면 True |
doesNotContain() | 지정한 값을 포함하지 않으면 True |
startWith() | 지정한 값으로 시작하면 True |
endWith() | 지정한 값으로 끝나면 True |
isPositive() | 양수이면 True |
isGreaterThan() | 지정한 값보다 크면 True |
isLessThan() | 지정한 값보다 작으면 True |
- 문자열 테스트 예제
assertThat("Hevlog 블로그에 오신것을 환영합니다!")
.isNotEmpty() // 비어있지 않고
.contains("Hevlog") // Hevlog를 포함하고
.doesNotContain("ABC") // ABC를 포함하지 않고
.startsWith("Hev") // Hev로 시작하고
.endsWith("!") // !로 끝나고
.isEqualsTo("Hevlog 블로그에 오신것을 환영합니다!"); // 와 일치하는지 확인.
- 숫자 테스트 예제
assertThat(10)
.isPositive() // 양수이고
.isGreaterThan(6) // 6보다 크고
.isLessThan(4) // 4보다 작고
.isEqualsTo(10) // 10과 같은지 확인
여기 까지 JUnit5의 개념과 어노테이션, 메서드에 대해 알아봤습니다.
각 어노테이션과 메서드에 대한 사용 예제는 포스팅이 너무 길어지는 관계로 따로 하나씩 공부하고 정리하여 포스팅하려 합니다.
정리되는대로 추후에 여기 아래에 링크 추가하겠습니다 !
참고자료
https://bibi6666667.tistory.com/231
https://velog.io/@ynjch97/JUnit5-JUnit5-%EA%B5%AC%EC%84%B1-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-Assertions-%EC%A0%95%EB%A6%AC
https://insight-bgh.tistory.com/507
'◼ JAVA' 카테고리의 다른 글
[우아한테크코스 백엔드 5기] 프리코스 2주차 후기 (숫자 야구 게임) (0) | 2022.11.09 |
---|---|
[Java/자바] 접근제어자(Access Modifier)란? (0) | 2022.11.08 |
[Java/자바] Stream 변환 표 (0) | 2022.11.05 |
[Java/자바] Stream(스트림)이란? 사용법 총정리 (0) | 2022.11.05 |
[우아한테크코스 백엔드 5기] 프리코스 1주차 회고 (온보딩) (2) | 2022.11.03 |