JUnit5 (JUnit4와 차이)

Date:     Updated:

카테고리:

태그:

JUnit이란?

JUnit(제이유닛)은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다. JUnit은 테스트 주도 개발 면에서 중요하며 SUnit과 함께 시작된 XUnit이라는 이름의 유닛 테스트 프레임워크 계열의 하나이다.

<위키백과 링크>

특징

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

Junit4가 단일 jar였던 것에 반해, Junit5는 Junit Platform, Junit Jupiter, Junit Vintage 모듈 세 가지로 구성되어 있다.

  • Junit Platform
    • JVM에서 동작하는 테스트 프레임워크입니다. 테스트를 발견하고 계획을 생성하고 결과를 보고하는 TestEngine 인터페이스를 정의한다.
  • Junit Jupiter
    • Junit5 TestEngine의 실제 구현체입니다. Junit5 기반의 테스트를 실행시키기 위한 TestEngine을 Platform에 제공한다.
  • Junit Vintage
    • TestEngine에서 Junit3 및 Junit4 기반 테스트를 실행하기 위한 기능을 제공한다.

Junit5는 Java 8 이상의 버전을 요구한다.

Junit 5 Annotation

Junit5에서 제공하는 org.junit.jupiter.api 패키지 내의 어노테이션을 설명한다.

  • @Test
    • 해당 어노테이션을 달아둔 메서드가 테스트 메서드임을 나타낸다.
  • @BeforeEach
    • 각각의 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory 전에 실행된다.
  • @AfterEach
    • 각각의 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory 후에 실행된다.
  • @BeforeAll
    • 모든 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory 전에 실행된다.
  • @AfterAll
    • 모든 @Test, @RepeatedTest, @ParameterizedTest, @TestFactory 후에 실행된다.
  • @ExtendWith
    • 확장을 선언적으로 등록하는데 사용됩니다. Extendtion 뒤에 인자로 확장할 Extension을 추가하여 사용한다.
    • Spring을 사용할 경우 @ExtendWith(SpringExtension.class)와 같이 사용한다.
  • @Disabled
    • 테스트 클래스 또는 테스트 메서드를 비활성화 하는데 사용됩니다.
  • @ParameterizedTest
    • 메서드가 매개변수가 있는 테스트임을 나타낸다.
  • @RepeatedTest
    • 메서드가 반복 테스트를 위한 테스트 템플릿임을 나타낸다.
  • @TestFactory
    • 메서드가 동적 테스트를 위한 테스트 팩토리임을 나타낸다.
  • @TestMethodOrder
    • 테스트 메서드 실행 순서를 구성하는데 사용된다.
  • @DisplayName
    • 테스트 클래스 또는 테스트 메서드에 대한 사용자 지정 표시 이름을 정해줄 때 사용된다.

Junit 4 vs Junit 5

Assertion 의 위치가 Junit5에서는 org.junit.jupiter.api.Assertions으로 변경됬다.
AssertJ, Hamcrest, Trust에서 제공하는 org.junit.Assert는 그대로 사용할 수 있다.

  • @Before과 @After 어노테이션이 사라지고, 각각 @BeforeEach와 @AfterEach로 변경됬다.
  • @BeforeClass와 @AfterClass 어노테이션이 사라지고, @BeforeAll과 @AfterAll로 변경됬다.
  • @Ignore이 사라지고, @Disabled로 변경됬다. 단, 이 경우 @EnableJUnit4MigrationSupport 어노테이션을 붙여준다.
  • @Category가 사라지고, @Tag로 변경됬다.
  • @RunWith이 사라지고 @ExtendWith으로 변경됬다.
  • @Rule과 @ClassRule이 사라지고, @ExtendWith과 @RegisterExtention으로 대체되었다.

Java 카테고리 내 다른 글 보러가기

댓글남기기