Test / JUnit5 / 테스트를 위한 애노테이션
JUnit5 / 테스트를 위한 애노테이션
JUnit5에서 제공하는 여러 어노테이션들을 알아보려고 한다.
1. JUnit5 모듈 구성
JUnit5는 크게 세 개의 요소로 구성되어 있다.
- JUnit Platform : 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API를 제공한다.
- JUnit Jupiter : JUnit5을 위한 테스트 API와 실행 엔진을 제공한다.
- JUnit Vintage : JUnit3, 4로 작성된 테스트를 JUnit5에서 플랫폼에서 실행하기 위한 모듈을 제공한다.
2. build.gradle에 추가하기
Spring boot에서 JUnit5를 사용하려면 다음과 같은 코드를 build.gradle에 추가하면 된다.
- 내 프로젝트 테스트에 JUnit Platform을 허용한다.
test { useJUnitPlatform() }
- JUnit Jupiter 의존을 추가한다.
dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' }
- JUnit3, 4를 실행하고 싶으면 JUnit Vintage 의존도 추가한다.
dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testCompileOnly 'junit:junit:4.13' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' }
- 위의 과정을 모두 생략하고 다음과 같이 한 줄로 테스트에 필요한 기본적인 의존들을 추가할 수 있다.
dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' }
3. 테스트를 위한 애노테이션
@Test
테스트를 실행할 메서드에 @Test 애노테이션을 붙인다.
이때 @Test 애노테이션을 붙인 메서드는 private이면 안 되며, default는 가능하다.
@Test
void 테스트() {
//내용
}
@DisplayName
자바는 메서드 이름에 공백이나 특수 문자를 사용할 수 없기 때문에 메서드 이름만으로 테스트의 내용을 설명하기 부족할 수 있다. 따라서 JUnit5는 테스트에 이름을 표시할 수 있는 @DisplayName 애노테이션을 제공한다.
@DisplayName("테스트 입니다.")
@Test
void test() {
//내용
}
@Disabled
특정 테스트를 실행하지 않고 싶을 때는 @Disabled 애노테이션을 사용한다. JUnit은 @Disabled 애노테이션이 붙은 클래스나 매서드를 테스트 실행 대상에서 제외된다. 완성하지 않거나 지우기 애매한 테스트에 이 애노테이션을 사용하면 된다.
@BeforeEach @AfterEach
간단한 예제를 먼저 살펴보자.
public class Lifecycle {
public Lifecycle() {
System.out.println("Lifecycle 생성");
}
@BeforeEach
void setUp(){
System.out.println("BeforeEach");
}
@Test
void test1(){
System.out.println("Test1");
}
@Test
void test2(){
System.out.println("Test2");
}
@AfterEach
void tearDown(){
System.out.println("AfterEach");
}
}
//결과화면
Lifecycle 생성
BeforeEach
Test1
AfterEach
Lifecycle 생성
BeforeEach
Test2
AfterEach
위의 결과를 보면 @Test 매서드를 실행할 때마다 객체를 새로 생성하고 테스트 메서드를 실행하기 전과 후에 @BeforEach와 @AfterEach 애노테이션을 붙인 메서드가 실행되는 것을 알 수 있다.
@BeforeEach 애노테이션은 테스트를 실행하는데 필요한 준비 작업을 할 때 사용된다. 반대로 @AfterEach 애노테이션은 테스트를 실행한 후 정리할 것이 있을 때 사용된다.
@BeforeAll @AfterAll
간단한 예제를 먼저 살펴보자.
public class Lifecycle {
public Lifecycle() {
System.out.println("Lifecycle 생성");
}
@BeforeAll
static void beforeAll(){
System.out.println("BeforeAll");
}
@Test
void test1(){
System.out.println("Test1");
}
@Test
void test2(){
System.out.println("Test2");
}
@AfterAll
static void afterAll(){
System.out.println("AfterAll");
}
}
//결과화면
BeforeAll
Lifecycle 생성
Test1
Lifecycle 생성
Test2
AfterAll
위의 결과를 보면 @BeforeAll 애노테이션은 모든 테스트 메서드가 실행되기 전 한 번만 실행된다. 반대로 @AfterAll 애노테이션은 모든 테스트 메서드가 끝난 후에 한 번만 실행된다. 두 애노테이션은 객체가 생성되기 전, 삭제된 후에 호출되기 때문에 정적(static) 메서드에만 사용할 수 있다.
4. 참고
'개발 > Test' 카테고리의 다른 글
Test / Spring Security / 단위 테스트에 Security 추가하기 (0) | 2021.06.15 |
---|
댓글