Spring & Spring boot

[Springboot] 테스트 코드 - 3 - JUnit5

jh4dev 2024. 8. 6. 10:45
<목차>

1. JUnit ?
2. JUnit 모듈
3. 테스트 환경 설정

 

[JUnit]

JUnit 의 J 는 Java의 약자로, JUnit 은 자바에서 활용되는 대표적인 테스트 프레임워크이다.

단위 테스트(Unit Tests)뿐 아니라, 통합 테스트(Integration Tests)를 할 수 있는 기능을 제공한다.

JUnit 의 특징으로는 다음과 같은 내용이 있다.

  • 몇 개의 어노테이션만 활용하여 간편하게 테스트 코드를 작성할 수 있다.
  • 단정문(Assert)를 통하여 테스트 케이스의 기댓값이 정상적으로 도출됐는지 검토할 수 있다.

또한, 현 시점 사용되는 JUnit 5 버전에서는 다음과 같은 기능이 제공된다.

  • JUnit 5는 확장 가능한 모델을 제공하여, 사용자 정의 확장을 쉽게 추가할 수 있다.
    커스텀 확장은 @ExtendWith 어노테이션을 사용한다.
  • 어노테이션을 활용해 조건부 테스트 기능을 제공한다.
    @EnabledIf, @DisabledIf, @EnabledOnOs, @DisabledOnOs
  • JUnit 5는 @TestFactory를 사용하여 동적으로 테스트를 생성할 수 있다.
    이는 런타임 시에 테스트 케이스를 생성하고 실행할 수 있게 해준다.
  • 병렬 테스트를 지원한다.
  • assertThrows() 를 활용하여 특정 예외가 발생하는지 테스트 할 수 있다.

https://junit.org/junit5/docs/snapshot/user-guide/#overview-what-is-junit-5

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model do not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and custo

junit.org

 


[JUnit 모듈]

이러한 JUnit5 는 크게 아래와 같이 세가지의 모듈로 구성된다.

  • JUnit Platform
    • JVM에서 테스트를 하기 위한 뼈대 역할을 한다.
    • 테스트를 발견 / 수행 / 결과 보고의 역할을 수행하는 테스트 엔진 (TestEngine) 의 인터페이스를 가지고 있다.
    • 각종 IDE 와의 연동을 보조하는 역할을 수행
    • TestEngine API, Console Launcher, JUnit4 Based Runner 등을 포함하고 있다.
  • JUnit Jupiter
    • TestEngine API 의 구현체를 포함하고 있으며, JUnit5 에서 제공하는 Junpiter 기반의 테스트를 실행하기 위한 테스트 엔진을 가지고 있다.
    • Jupiter Engine 을 포함하고 있다.
    • Jupiter Engine은 Jupiter API 를 활용해 작성한 테스트 코드를 발견하고 실행하는 역할을 수행한다.
  • JUnit Vintage
    • JUnit 3, 4 버전에 대한 테스트 엔진 API 를 구현하고 있다.
    • Vintage Engine 을 포함하고 있다.

 


[테스트 환경 설정]

이제 Springboot 에서 JUnit 테스트 환경을 구축해보자.
Springboot는 JUnit 테스트 환경을 쉽게 설정할 수 있도록, spring-boot-starter-test 프로젝트를 지원한다.
<의존성 추가>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

 

maven 탭을 확인해보면, 아래와 같은 의존성을 가진 것을 확인할 수 있다.

spring-boot-starter-test dependency

spring-boot-starter-test 에서 제공하는 대표적인 라이브러리로는 아래 라이브러리가 있다.

  • JUnit5
    • 자바 애플리케이션의 단위 테스트를 지원
  • Spring Test, Spring Boot test
    • 스프링 부트 애플리케이션에 대한 유틸리티와 통합 테스트를 지원
  • AssertJ
    • 다양한 assert 문을 지원
  • Mockito
    • 자바 Mock 객체를 지원
  • JSONassert
    • JSON 용 assert 라이브러리

 

JUnit은 그 기능의 풍부함과 사용의 용이성 덕분에 Java 애플리케이션에서 단위 테스트를 작성할 때 가장 많이 사용되는 프레임워크이며, 특정 요구사항이나 선호에 따라 TestNG, Mockito, AssertJ, Spock 등 다른 프레임워크와 함께 사용되기도 한다. JUnit은 여전히 Java 테스트의 중심에 있으며, 많은 개발자들 사이에서 기본 선택지로 자리잡고 있다.

 

다음 포스팅에선, JUnit 테스트 코드를 작성하는 방법에 대해 알아보자.


[참고 도서]

 

<스프링 부트 핵심 가이드>
저자 : 장정우

출판사 : 위키북스