티스토리 뷰
Architecture
JUnit4는 all in one으로, JUnit 라이브러리만 정의해주면 된다
JUnit5는 모듈이 3개(JUnit Platform, JUnit Jupiter, JUnit Vintage)로 나누어져 있다.
(+) 테스트 작성자를 위한 API 모듈과 테스트 실행을 위한 API가 분리되어 있다. JUnit Jupiter를 예로 들면, 테스트 코드 작성에 필요한 junit-jupiter-api 모듈과 테스트 실행을 위한 junit-jupiter-engine 모듈로 분리된다.
- JUnit Platform은 JVM에서 테스트 프레임 워크를 시작하기 위한 기반 역할을 수행한다. TestEngine API가 정의되어 있다.
- JUnit Jupiter는 new asserts, new annotations, Java 8 Lambda Expressions, 등과 같은 JUnit5에 테스트를 작성하기 위해 추가된 확장 기능들을 포함한다.
- JUnit Vintage는 JUnit3, JUnit4 기반 테스트를 JUnit5 플랫폼에서 수행할 수 있도록 지원한다. 그렇다고 각 버전을 혼용해서 사용하는 것은 지양해야한다. 서로 별개로 분리되어 실행되므로 의도한 대로 테스트가 동작하지 않을 수 있기 때문이다.
Supported Java Versions
JUnit4는 Java 5 이상
JUnit5는 Java 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 |