⚠️ 우아한테크코스 "바다"님의 10분 테코톡 영상 "바다의 JUnit5 사용법" 을 보고 정리한 내용입니다.
JUnit Platform : 테스트코드를 실행해주는 런처를 제공
Jupiter, Vintage : 각각 JUnit5, JUnit3~4의 TestEngine api 구현체
⇒ 플랫폼을 통해 런처가 실행되고 버전에 따라 각각 Juptier, Vintage로 테스트가 진행된다.
Jupiter에서는 테스트 및 확장된 기능을 위한 여러가지 어노테이션을 제공한다.
@Test
@BeforeAll
, @AfterAll
해당 클래스에 위치한 모든 테스트메서드 실행 전/후에 딱 한 번 실행되는 메서드@BeforeEach
, @AfterEach
해당 클래스에 위치한 모든 테스트메서드 실행 전/후에 실행되는 메서드@Disabled
테스트를 하고 싶지 않은 클래스나 메서드에 붙임DisplayName
RepeatedTest
ParameterizedTest
@CsvSource
를 이용해서 다양한 값을 매개변수로 줄 수 있다.@Nested
“단정문”. 테스트 케이스의 수행 결과를 판별하는 메소드.
assertEquals(expected, actual)
assertEquals(expected, actual, 오차범위)
assertArrayEquals(expected, actual)
배열의 일치여부
assertTrue(조건)
조건의 true 여부
assertNull(object)
객체 null 여부
assertNotNull(object)
…
assertAll(executables ...)
assertThrows(expectedType, executable)
asserDoesNotThrow
도 사용 가능하다.assertTimeout(duration, executable)
“전제문”. 전제문이 true라면 테스트를 실행, false라면 테스트를 종료함
전제문이 false일 때
assumeTrue
: 이후의 테스트 전체가 실행되지 않음assumingThat
: 파라미터로 전달된 코드블럭만 실행되지 않음자바 테스트를 위해 개발된 오픈소스 라이브러리.
assertion을 제공하는 라이브러리로, 좀 더 풍분한 문법을 사용할 수 있고 메서드 체이닝을 통해 직관적인 테스트 흐름을 작성할 수 있게 해준다.
AssertJ에서 모든 테스트 코드는 assertThat(testTarget)
으로 시작한다.
assertThat
메소드에 테스트 대상을 파라미터로 전달하면 여러가지 메소드를 호출할 수 있으며, 메소드체이닝을 지원한다.@Test
void 문자열테스트() {
assertThat("Hello, world!")
.isNotEmpty()
.contains("Hello")
.doesNotContain("ZZZ")
.isEqualTo("Hello, world!");
}
테스트 코드를 위한 디렉터리 생성
프로젝트 우클릭 - New - Driectory
테스트 소스 디렉터리 지정
프로젝트 우클릭 - Open Module Settings - 1번에서 생성한 디렉터리를 테스트 소스 디렉터리로 지정한다.
Junit, Assertj 라이브러리 추가
테스트코드 작성
테스트 코드에서 실행하고자 하는 테스트 메서드의 이름을 우클릭하여
Run ‘메소드명’
클릭
💡 테스트 시 목록이 보이게 하려면 intellij에서 Gradle이 아닌 IntelliJ IDEA를 기준으로 Test를 진행하도록 하면 된다. Gradle 빌드도구로 테스트를 하기 때문에 IntelliJ에서 결과만 보이는 것. (Preferences - gradle - Run tests using)
참고링크
또, 아래 화면처럼 시계 아이콘을 클릭하면 과거의 테스트 이력을 확인할 수 있다.