티스토리 뷰

Spring

JUnit 4와 5 비교

soo__ 2022. 5. 16. 11:41

Architecture

JUnit4all in one으로, JUnit 라이브러리만 정의해주면 된다

JUnit5모듈이 3개(JUnit Platform, JUnit Jupiter, JUnit Vintage)로 나누어져 있다.

(+) 테스트 작성자를 위한 API 모듈과 테스트 실행을 위한 API가 분리되어 있다. JUnit Jupiter를 예로 들면, 테스트 코드 작성에 필요한 junit-jupiter-api 모듈과 테스트 실행을 위한 junit-jupiter-engine 모듈로 분리된다.

JUnit 5

  • JUnit Platform은 JVM에서 테스트 프레임 워크를 시작하기 위한 기반 역할을 수행한다. TestEngine API가 정의되어 있다.
  • JUnit Jupiter는 new asserts, new annotations, Java 8 Lambda Expressions, 등과 같은 JUnit5에 테스트를 작성하기 위해 추가된 확장 기능들을 포함한다.
  • JUnit Vintage는 JUnit3, JUnit4 기반 테스트를 JUnit5 플랫폼에서 수행할 수 있도록 지원한다. 그렇다고 각 버전을 혼용해서 사용하는 것은 지양해야한다. 서로 별개로 분리되어 실행되므로 의도한 대로 테스트가 동작하지 않을 수 있기 때문이다.

 

Supported Java Versions

JUnit4Java 5 이상

JUnit5Java 8 이상

 

 

Annotations

  • @Before(JUnit4) / @BeforeEach(JUnit5)
    • 테스트 클래스의 각 테스트 메서드를 실행하기 전에 실행됨
  • @After(JUnit4) / @AfterEach(JUnit5)
    • 테스트 클래스의 각 테스트 메서드가 실행된 후에 실행됨
  • @BeforeClass(JUnit4) / @BeforeAll(JUnit5)
    • 테스트 클래스의 모든 테스트 메서드가 실행되기 전에 실행됨(테스트 케이스가 시작되기 전에 테스트 클래스 당 한 번)
  • @AfterClass(JUnit4) / @AfterAll(JUnit5)
    • 테스트 클래스의 모든 테스트 메서드가 실행된 후에 실행됨(모든 테스트 케이스가 실행을 완료한 후 테스트 클래스 당 한 번)
  • 전체적인 테스트 라이프사이클은 JUnit5 기준 BeforeAll -> BeforeEach -> Test -> AfterEach -> AfterAll 
  • @Test
    • 공통으로 이 어노테이션이 있는 메서드는 클래스의 테스트 케이스를 나타냄
    • JUnit4에서 해당 메서드는 public으로 선언되어야 하며, JUnit5는 기본적으로 접근제어 지시자가 없으면 public으로 간주하므로, public 없이 정의된 테스트 케이스를 허용함
  • @Ignore(JUnit4) / @Disable(JUnit5)
    • 테스트 클래스 또는 메서드 Distable 처리
  • @Nested(JUnit5)
    • JUnit Jupiter에서만 지원되며, 클래스 안의 클래스를 선언할 수 있도록 함(중첩된 테스트 케이스를 생성하는데 도움)
  • @Category(JUnit4) / @Tag(JUnit5)
    • 테스트에 태그를 지정하고 필터링하는데 도움(실행할 테스트를 포함하거나 해당 카테고리에 따라 필터링하여 제외할 수 있음)
  • @DisplayName(JUnit5)
    • JUnit4에서는 reports와 IDE test runner에 메서드명이 출력되었다면, JUnit5에서는 @DisplayName을 통해 출력되는 이름을 메서드명과 별개로 지정할 수 있음

 

Assertions

  • JUnit4에서 사용하던 assertThat 메서드를 JUnit5에서는 지원하지 않고 assertAll, assertThrows 메서드를 신규로 지원한다.
  • assertion의 메세지 파라미터 위치가 달라졌다. JUnit4는 첫번째 파라미터로 전달받았으나, JUnit5에서는 마지막 파라미터로 전달받는다.

 

'Spring' 카테고리의 다른 글

Spring Boot의 다중 요청 처리 (+서블릿 컨테이너)  (0) 2022.05.23
JPA 영속성 컨텍스트  (0) 2022.04.28
Redisson 분산락  (0) 2022.04.27
컴포넌트 스캔과 수동 Bean 등록  (0) 2022.04.24
OSIV  (0) 2022.04.24
공지사항
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31