2017년 Junit 5가 나왔음
Junit5는 4와다르게 자체 모듈로 모든걸 끝낸다. 내부에는
두개의 구현체 (Jupiter, Vintage)가 있음. Vintage는 이전 3,4를 지원하는 구현체, 5부터는 Jupiter만 신경쓰면 된다.
예시 프로젝트를 만들어보자. 의존성은 아무것도 추가 안하고 java 21버전으로 만들었음.
Junit5는 스프링부트 스타터 라이브러리에 포함되어있기 때문에 따로 추가할 필요가 없다.
💡 Junit5부터는 테스트 코드가 public일 필요가 없어졌다. java의 리플랙션을 이용하면 public일 필요가 없기 때문.
package com.testcode;
import static org.junit.jupiter.api.Assertions.assertNotNull;
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.Disabled;
import org.junit.jupiter.api.Test;
public class StudyTest {
@Test
void create() {
Study study = new Study();
assertNotNull(study);
}
// 테스트 전체 실행 전에 반드시 딱 한번 실행
// 반드시 static 메서드여야 함.
@BeforeAll
static void beforeAll() {
System.out.println("beforeAll");
}
// 모든 테스트 실행 후에 반드시 딱 한번 실행
// 반드시 static 메서드여야 함반
@AfterAll
static void afterAll() {
System.out.println("afterAll");
}
// 각각 테스트 실행 전에 반드시 실행
@BeforeEach
void beforeEach() {
System.out.println("beforeEach");
}
// 각각 테스트 실행 후에 반드시 실행
@AfterEach
void afterEach() {
System.out.println("afterEach");
}
// 테스트 하고 싶지 않은 경우 임시로 추가
// @Disabled
}
그냥 @DisplayName()
알면 된다.
관련해서 @DisplayNameGeneration()
이라는 애너테이션도 있음. 메서드 명의 네이밍 전략에 따라 자동으로 테스트 이름 만들어주는 그런 애너테이션…