안녕하세요. 오늘은 JUnit 5버전에 대해서 포스팅하고자 합니다.
현재 스프링부트 버전이 2.3버전이 나온걸로 알고 있습니다. 기본적으로 스프링 부트 프로젝트를 생성하니 2.3이라고 적혀있더라구요. 그런데 스프링부트 2.2버전부터 스프링 테스트 도구로 JUnit 5 버전을 채택했다고 합니다. 따라서 2.2 이후 프로젝트에서는 JUnit 5버전을 사용하실 수 있게 됬다고 합니다.
스프링부트 2.3 버전도 이미 나왔고, 2.2 버전에서 채택된 JUnit5 버전을 사용하지 않을 이유가 없다고 생각해서 JUnit5 버전을 채택했습니다. JUnit 5버전은 패키지명에 jupiter가 들어가니 확인해주시기 바랍니다.
저는 Spring Initailzr를 통해 스프링부트 프로젝트를 만들었습니다.
프로젝트를 생성하는 부분은 생략하겠습니다. 혹시나 생성하는 방법을 모르신다면 다음의 사이트를 접속해보시면 바로 알 수 있으실 겁니다.
* 참고로 JUnit은 Java 8 버전부터 사용이 가능하니 Java 버전을 8 혹은 이후버전을 선택해주셔야 합니다.
만약 스프링부트를 사용하지 않고 Maven 프로젝트로 진행한다고 하셔도 무방합니다만 다음의 디펜던시는 추가를 해주셔야 합니다.
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
스프링 부트 프로젝트에서는 기본적으로 아래의 디펜던시가 추가되어있을 것입니다. 이때 JUnit5도 함께 추가됩니다.
<dependency>
<!-- Spring Boot 2.2 부터 JUnit5를 탑재하였다. -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
기본 어노테이션들
먼저 프로젝트 루트에 MyClass 라는 클래스를 생성해줍니다. 안에 내용은 아무것도 적지 않고 진행하겠습니다. 어차피 어노테이션이 어떻게 동작하는지만 확인하면 됩니다.
Test 클래스는 test 경로에 생성해주어야 합니다. MyClass 클래스를 테스트할 것이니 MyClassTest라는 클래스를 테스트 디렉토리에 생성해줍니다.
프로젝트 구조는 다음과 같습니다.
MyClassTest.java
package woo.sunghwan.infleanthejavatest;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
class MyClassTest {
@Test
void create() {
MyClass myclass = new MyClass();
assertNotNull(myclass);
System.out.println("create");
}
@Test
@Disabled
void create1() {
System.out.println("create1");
}
@BeforeAll
static void beforeAll() {
System.out.println("before all");
}
@AfterAll
static void afterAll() {
System.out.println("after all");
}
@BeforeEach
void beforeEach() {
System.out.println("before each");
}
@AfterEach
void afterEach() {
System.out.println("after each");
}
}
- 먼저 클래스가 public이 안붙어 있는 것을 의아하게 생각하실 수 있다. 기본적으로 IDE를 통해 생성된 클래스는 public이다. 하지만 JUnit5버전에서는 자바의 reflection을 통해 처리했는지 default 클래스, default 메소드로도 테스트가 가능하게 업데이트 되었다.
- JUnit4때와 같이 @Test 어노테이션은 테스트를 만드는 모듈 역할을 한다. @Test가 붙어있는 메소드는 main 메소드처럼 IDE로 직접 실행할 수 있는 메소드이다. 무리없이 실행되어 test passed가 떨어질 것이다.
- @Disabled 어노테이션은 특정 메소드가 @Deprecated 되었거나 테스트에 확실히 passed되는 경우가 아닐때 실행되지 않도록 처리하는 부분이다. 에러를 수정하거나 테스트를 제거하는 등 확실한 처리가 더 중요하지 @Disabled를 그대로 두는 것은 좋지 않다고 한다.
- @BeforeAll, @AfterAll 어노테이션은 이름만 봐도 알겠듯이 클래스에 존재하는 모든 메소드를 실행한다고 할때, 메소드 시작하기전, 끝난 후에 실행되는 단위들이다.
- @BeforeEach, @AfterEach 어노테이션들은 마찬가지로 각각의 Test 메소드가 실행될 때 호출되는 메소드이다. 각각의 메소드가 실행 전, 실행 후에 호출되어 처리되는 것들이다. @BeforeEach는 공통적인 Param 및 설정을 할때 호출되면 좋을 부분이다. @AfterEach는 사용되고 난 후 종료되어야할 리소스를 처리하는 부분으로 사용될 가능성이 높다.
실행 결과.(@Disabled는 주석처리 하였다)
before all
before each
create
after each
before each
create1
after each
after all
오늘은 간단히 JUnit5의 기본적인 어노테이션에 대해서 알아보았다.
'Testing > JUnit' 카테고리의 다른 글
[JUnit5] 예외 처리 테스트하는 방법, assertThrows 메소드 (0) | 2020.06.18 |
---|---|
[JUnit4] JUnitParams를 이용한 테스트 반복(@Parameters) (0) | 2020.06.14 |
[JUnit5] 여러 값으로 단위 테스트 반복하기(@ParameterizedTest, @ValueSource, @CsvSource, ArgumentsAggregator , ArgumentsAggregator ) (0) | 2020.06.13 |
[JUnit5] Assertion 메소드(assertTrue, assertEquals, assertAll 등) (0) | 2020.06.11 |
[JUnit] Spring / Spring Boot, 테스트 코드를 작성하는 방법 (0) | 2020.06.07 |