천천히 알아보는 코딩공부

JUnit (jUnit5)란? 본문

Java/테스트

JUnit (jUnit5)란?

고기고기물고기 2024. 9. 3. 17:24

JUnit 5란?

JUnit 5는 JUnit 프레임워크의 최신 버전으로, JUnit Platform, JUnit Jupiter, JUnit Vintage라는 세 가지 주요 모듈로 구성

  • JUnit Platform: JUnit 5에서 테스트를 실행하는 런처 역할 IDE, 빌드 도구(예: Maven, Gradle)에서 JUnit 테스트를 실행할 수 있는 인프라를 제공
  • JUnit Jupiter: JUnit 5의 핵심 테스트 API를 제공 여기에는 새로운 테스트 어노테이션, 확장 모델, 다양한 유틸리티가 포함돼 있어. @Test, @BeforeEach, @AfterEach 같은 어노테이션.
  • JUnit Vintage: JUnit 4와 JUnit 3으로 작성된 테스트를 JUnit 5 환경에서 실행할 수 있게 해주는 모듈 덕분에 JUnit 4로 작성된 기존 테스트 코드를 쉽게 유지하면서 JUnit 5로 마이그레이션 가능

JUnit 5의 주요 특징

  1. 확장된 어노테이션
    • @Test: 기본적인 테스트 메서드를 나타내. JUnit 4와 동일하지만, JUnit 5에서는 더 유연하게 사용
    • @BeforeEach: 각 테스트 메서드 실행 전에 수행할 작업을 정의. JUnit 4의 @Before에 해당
    • @AfterEach: 각 테스트 메서드 실행 후에 수행할 작업을 정의. JUnit 4의 @After에 해당
    • @BeforeAll: 모든 테스트 메서드 실행 전에 한 번만 실행. JUnit 4의 @BeforeClass에 해당
    • @AfterAll: 모든 테스트 메서드 실행 후에 한 번만 실행. JUnit 4의 @AfterClass에 해당
    • @DisplayName: 테스트 메서드의 이름을 커스터마이징, 테스트 보고서에서 더 읽기 쉽게 만들어줌
    • @Nested: 클래스 안에 중첩된 테스트 클래스 정의가 가능, 논리적으로 관련된 테스트들을 그룹화 가능
    • @Tag: 테스트 메서드나 클래스에 태그를 붙여서, 특정 태그에 따라 테스트 그룹을 실행할 수 있어.
  2. 람다 표현식과 스트림 API 지원
@Test
void groupedAssertions() {
    User user = new User("John", "Doe");

    assertAll("user",
        () -> assertEquals("John", user.getFirstName()),
        () -> assertEquals("Doe", user.getLastName())
    );
}
    1. 이 코드는 assertAll을 사용해서 user 객체의 여러 속성을 한 번에 검증. 만약 어떤 검증이 실패하더라도 다른 검증이 계속 실행되기 때문에, 문제를 더 잘 파악 가능
    2. JUnit 5에서는 자바 8의 람다 표현식과 스트림 API를 활용. 특히, assertAll 같은 기능은 여러 검증을 하나의 블록으로 묶어서 실행하는 데 유용

  3. 확장 모델

JUnit 5에서는 @ExtendWith 어노테이션을 통해 테스트 클래스에 확장 기능을 추가가능. 예를 들어, Mockito와의 통합을 쉽게 하기 위해 @ExtendWith(MockitoExtension.class)를 사용

    • @ExtendWith: 외부 확장을 추가할 때 사용. 예를 들어, Mockito 확장을 추가해서 모의 객체를 사용.
    • ParameterResolver: 테스트 메서드에 파라미터를 주입할 수 있는 기능을 제공. 예를 들어, 의존성을 주입하거나, 테스트 데이터 생성을 쉽게 거눙
@ExtendWith(MockitoExtension.class)
class MyServiceTest {
    // Mockito와의 통합을 통해 모의 객체를 사용한 테스트
}

 

JUnit의 주요 기능

  • 테스트 메서드 정의: @Test 어노테이션을 사용해 테스트 메서드를 정의. 각 테스트 메서드는 독립적으로 실행되며, 애플리케이션의 특정 기능을 검증.
  • 테스트 실행과 결과 보고: JUnit은 테스트 메서드를 실행하고, 그 결과를 보고합니다. 테스트가 성공했는지, 실패했는지, 또는 예외가 발생을 알 수 있음.
  • Assertions (단언문): assertEquals, assertTrue, assertNull 등 다양한 단언문을 제공하여, 테스트 결과가 예상한 값과 일치하는지 확인가능.
  • 라이프사이클 관리: JUnit은 테스트 메서드의 실행 전후에 필요한 초기화나 정리 작업을 할 수 있도록 @Before, @After 같은 어노테이션을 제공.
  • 테스트 스위트: 여러 테스트 클래스를 하나로 묶어 한 번에 실행할 수 있는 테스트 

JUnit 4와 JUnit 5의 차이점

  1. 어노테이션 이름: JUnit 5에서는 어노테이션 이름이 일부 변경되거나 새로운 어노테이션이 추가 예를 들어, JUnit 4의 @Before, @After는 JUnit 5에서 @BeforeEach, @AfterEach로 바뀜
  2. 확장 모델: JUnit 4는 @RunWith를 사용해 확장을 적용했지만, JUnit 5는 @ExtendWith를 사용해 더 유연한 확장 모델을 제공.
  3. 다양한 테스트 기능: JUnit 5는 동적 테스트, 조건부 테스트 실행, 반복 테스트 등 JUnit 4보다 더 많은 기능을 제공.
  4. 기반 아키텍처: JUnit 5는 완전히 새로운 구조로 설계되어, 플랫폼, Jupiter, Vintage로 모듈화되어 있어. 이로 인해 더 확장 가능하고 유연한 테스트 환경을 제공.

'Java > 테스트' 카테고리의 다른 글

Java 테스트에서의 Mocking 라이브러리  (0) 2024.09.09
Comments