JUnit5 Test
Java 단위테스트 프레임워크
SpringBoot 2.2.0부터 공식적으로 JUnit5를 지원
JUnit4와의 차이점
- JDK버전 : Java8이상 (JUnit4 : Java5 이상)
- Architecture : 3개의 하위 프로젝트 (JUnit4 : 단일 jar)
- annotation 이름변경 가능
- 기능 추가
given/when/then 패턴
1개의 단위테스트를 3가지 단계로 나누어 처리
- given(준비): 어떠한 데이터가 준비되었을 때
- when(실행): 어떠한 함수를 실행하면
- then(검증): 어떠한 결과가 나와야 함
@DisplayName("에이 테스트")
@Test
void aTest() {
// given
// when
// then
}
annotation
- @Test : 테스트 메서드임을 명시
@Test
void test() {
}
- @ParameterizedTest : 매개변수가 있는 테스트메서드임을 명시
@ParameterizedTest
@ValueSource(strings = { "taehee" })
void test(String name) {
}
- @RepeatedTest : 반복되는 테스트임을 명시
@RepeatedTest(3) // 3번 반복
void test() {
}
- @TestFactory : 런타임에 생성되는 동적테스트임을 명시
그 자체가 테스트라기보다는 테스트케이스를 위한 팩토리
@TestFactory
Collection<DynamicTest> dynamicTestsFromCollection() {
return Arrays.asList(dynamicTest("1st dynamic test", () -> assertEquals(6, 3 * 2)),
dynamicTest("2nd dynamic test", () -> assertEquals(4, 2 * 2)));
}
- @TestTemplate : 여러번 호출할 수 있게 설계된 테스트템플릿
- @TestMethodOrder : 테스트메서드 실행순서 명시
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class HelloJavaTest {
@Test
@Order(2)
void test2() {
System.out.println("2");
}
@Test
@Order(1)
void test1() {
System.out.println("1");
}
}
- @DisplayName : 테스트클래스나 메서드에 사용자지정 이름 명시 (default : method명)
class HelloJavaTest {
@DisplayName("에이 테스트")
@Test
void aTest() {
}
}
- @DisplayNameGeneration : 테스트클래스에 사용자지정 이름 명시
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
@DisplayNameGeneration(DisplayNameGenerator.IndicativeSentences.class)
class HelloJavaTest {
@Test
void aTest() {
}
}
- @BeforeAll : static, 클래스에 있는 모든 테스트 전에 한번 실행
- @AfterAll : static, 클래스에 있는 모든 테스트 후에 한번 실행
- @BeforeEach : 각 테스트 실행 전 한번씩 실행
- @AfterEach : 각 테스트 실행 후 한번씩 식행
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class HelloJavaTest {
@BeforeAll
static void beforeAll() {
System.out.println("beforeAll");
}
@AfterAll
static void afterAll() {
System.out.println("afterAll");
}
@BeforeEach
void beforeEach() {
System.out.println("beforeEach");
}
@AfterEach
void afterEach() {
System.out.println("afterEach");
}
@Test
void test1() {
System.out.println("test1");
}
@Test
void test2() {
System.out.println("test2");
}
@Test
void test3() {
System.out.println("test3");
}
}
결과
beforeAll
beforeEach
test1
afterEach
beforeEach
test2
afterEach
beforeEach
test3
afterEach
afterAll
설정
build.gradle (5.7.0 버전)
dependencies {
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter', version: '5.7.0'
}
이렇게 추가해도되고,
- spring-boot-starter-web를 선택했다면 자동으로 spring-boot-starter-test 의존성이 추가
- spring-boot-starter-test에 junit5가 기본적으로 있음
Reference
https://junit.org/junit5/docs/current/user-guide/#writing-tests-dynamic-tests