Java에서 단위테스트를 수행하는 테스트 프레임워크
Java 개발자라면 반드시 알고있어야 하는 테스팅 프레임워크 중 하나입니다. XUnit이라는 이름의 유닛 테스트 프레임워크 중 하나로 Java에서는 JUnit, C언어에서는 CUnit으로 불립니다.
Intellij를 만든 JetBrain 사에서 조사한 결과 단위 테스트를 필수적으로 생각하는 개발자는 2022년 기준 79%입니다. 2022년 68%, 2021년 에 75%로 점점 증가하는 추세입니다. 이를 통해 개발 단계에서 단위 테스트를 하는 것이 선택 사항이 아니라 필수 사항으로 자리 잡아가는 것을 알 수 있습니다.
그 중 JUnit을 사용하는 개발자는 2021년에는 34% 2022년에는 31%로 점점 줄어들고 있습니다. JUnit 외에 Jest, PyTest, Selenium 등 여러 가지 테스팅 프레임워크가 있지만 이번엔 JUnit에 대해 알아보겠습니다.
JUnit을 사용해야하는 이유
웹 개발에 대해서 처음 배우는 단계에서는 테스팅에 대한 개념도 없었고, 필요성에 대해서 느끼지 못했습니다. 초반에는 스프링 부트로 개발하면서 코드가 변경되면 서버구동 후 localhost로 집속 후 일일히 확인하는 과정으로 테스트를 했습니다.
하지만 여러 개의 프로젝트를 거쳐 사이즈가 더 큰 프로젝트를 경험하면서 수많은 서비스 로직의 동작 여부를 하나씩 직접 확인하고, 서비스 운영 과정에서 발생하는 장애를 겪어보면서 테스트 과정의 중요성과 필요성을 느낄 수 있었습니다.
JUnit 테스팅 프레임워크에서 이 모든 테스트 과정을 사전에 미리 테스트함으로써 서비스 로직 코드의 신뢰성을 높힐 수 있고, 단위를 나누어 테스트함으로써 서비스 운영 시 발생할 수 있는 장애를 사전에 방지할 수 있습니다.
JUnit5란?
JUnit5는 JUnit의 5번 째 버전을 뜻하며 2017년 2월에 출시되어 많은 사용자들이 사용하고 있는 테스팅 프레임워크입니다.
JUnit5는 이전 버전들과는 다르게 3개의 서브 프로젝트 모듈(JUnit Platform + JUnit Jupiter + JUnit Vintage)로 이루어져 있습니다.
1. JUnit Platform
JUnit Platform은 JVM에서 테스트 프레임워크를 시작하기 위한 기반을 제공합니다. 또한 플랫폼에서 실행되는 테스트 프레임 워크 개발을 위한 TestEngine API를 정의합니다. 모두가 잘 아는 IDEs(Intellij, Eclipse, VS Code), 빌드 도구(Gradle, Maven, Ant)에서도 JUnit Platform을 지원합니다.
2. JUnit Jupiter
JUnit Jupiter는 JUnit5에서 테스트 작성을 위한 새로운 프로그래밍 모델과 확정 모델 조합입니다. 즉, 테스트를 하기 위한 것들이 포함되어 있습니다.
3. JUnit VIntage
플랫폼에서 JUnit3, JUnit4 기반한 테스트 코드가 실행될 수 있는 TestEngine을 제공합니다. 기본적으로 JUnit5에서는 3, 4버전의 문법을 사용할 수 없지만 JUnit Vintage 모듈을 통해 사용할 수 있습니다. 하지만 완벽하게 지원하는 것은 아니기 때문에 만약 사용한다면 추가적으로 작업이 필요합니다.
JUnit5 기본 어노테이션
JUnit Jupiter는 테스트를 구성하기 위한 여러 가지 어노테이션을 지원합니다. 아래의 어노테이션만 알아도 어느 정도 테스트가 가능합니다.
어노테이션 | 설명 |
@Test | 테스트 메소드를 나타내는 어노테이션, 테스트를 위해서는 필수도 작성되어야한다. |
@BeforeEach | 각 테스트 메소드 시작 전에 실행되는 메소드 |
@AfterEach | 각 테스트 메소드 종료 후에 실행되는 메소드 |
@BeforeAll | 테스트 시작 전에 실행되는 메소드 (static 메소드) |
@AfterAll | 테스트 종료 후에 실행되는 메소드 (static 메소드) |
@Disable | 실행되지 않아야 하는 테스트 메소드 |
'Java > Junit' 카테고리의 다른 글
[Spring] JUnit5 기반 기능 구현해보기 - Repository 단위 테스트 (0) | 2023.08.31 |
---|---|
[Spring] JUnit5 기반 기능 구현해보기 - 구조 설계 (0) | 2023.08.30 |
[Spring] JUnit5 Assertions & Assumptions (0) | 2023.08.30 |
[Spring] JUnit5으로 테스트해보기 (0) | 2023.08.30 |