JUnit
1 JUnit5
- 자바 개발자가 가장 많이 사용하는 테스팅 프레임워크입니다.
- JUnit5는 자바 8 이상 버전을 필요로 합니다.
- JUnit 이외에도 TestNG, Spock 등의 대체 프레임워크가 존재합니다.
1.1 build
gradle
test {
useJUnitPlatform()
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.8.2")
}
2 구성요소
- JUnit5는 크게 세 개의 요소로 구성되어 있습니다.
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
2.1 JUnit Platform
- JUnit Platform은 테스팅 프레임워크를 구동하기 위한 런처(Launcher)와 테스트 엔진을 위한 API를 제공합니다.
- 런처:
junit-platform-launcher
모듈에서 제공됩니다. - 테스트 엔진 API:
junit-platform-engine
모듈에서 제공됩니다.
2.2 Jupiter
- JUnit Jupiter는 JUnit 5에서 제공하는 TestEngine API의 구현체입니다.
- JUnit 5의 새로운 프로그래밍 모델과 확장 모델을 제공합니다.
2.3 Vintage
- JUnit Vintage는 JUnit 3와 JUnit 4를 지원하기 위한 TestEngine API의 구현체입니다.
- 이를 통해 이전 버전의 JUnit으로 작성된 테스트를 JUnit 5 플랫폼에서 실행할 수 있습니다.
1.2 Junit5 시작하기
- 스프링 부트 2.2 버전 이상의 프로젝트를 생성하면 기본적으로 JUnit 5의 의존성이 추가됩니다.
- 만약 수동으로 의존성을 추가하려면 다음과 같이 설정할 수 있습니다.
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
2 애노테이션
- JUnit 5에서 제공하는 주요 애노테이션은 다음과 같습니다.
2.1 @Test
@Test
애노테이션은 메서드가 테스트 메서드임을 나타냅니다.- JUnit 4의
@Test
애노테이션과 달리 JUnit Jupiter의@Test
애노테이션에는 속성이 없습니다. - 리플렉션을 사용하므로 메서드의 접근 제어자가
public
일 필요는 없지만,private
은 안됩니다.
2.2 @BeforeAll / @AfterAll
@BeforeAll
주석이 달린 메서드가 모든@Test
,@RepeatedTest
,@ParameterizedTest
,@TestFactory
보다 먼저 실행되어야 함을 나타냄- 한 클래스의 모든 테스트 메서드가 실행되기 전에 특정작업을 수행해야할 때 @BeforeAll 애노테이션 사용
- 한 클래스의 모든 테스트 메서드가 실행한 뒤에 특정작업을 수행해야할 때 @AfterAll 애노테이션 사용
- 두 애노테이션 모두 정적 메서드에 적용가능
- @BeforeAll : 모든 테스트 메서드를 실행하기 전에 한 번 실행된다
- @AfterAll : 모든 테스트 메서드를 실행한 뒤에 한 번 실행된다
- JUNit 4의
@BeforeClass
와 유사합니다.
@AfterAll
static void afterAll(){
...
}