JUnit 5 초보자 가이드

JUnit 5는 개발자가 코드를 단위 테스트하는 데 사용하는 소프트웨어 테스팅 프레임워크입니다. 이는 Java 기반으로 작성 및 실행되는 테스트를 Java 플랫폼에서 수행할 수 있도록 해주며 테스트 결과를 표시하는 통합 보고서도 포함하고 있습니다.

JUnit은 주로 두 가지 목적으로 자동화 테스트에 사용될 수 있습니다:

  1. 소프트웨어가 예상대로 작동하는지 테스트
  2. 코드의 오류를 찾아 보고하고 신속히 수정

이 블로그에서는 JUnit 5의 설정, 구성 및 기본적인 메서드에 중점을 두고 학습할 것입니다.

JUnit 5란?

JUnit 5는 JUnit 테스트 프레임워크의 최신 버전입니다. 이는 Java 8 이상의 최신 버전을 지원하며 다양한 테스트 스타일을 수용하며 JVM에서 개발자 측 테스트를 위한 현대적인 기반을 제공합니다.

JUnit 사용의 주요 이점 중 하나는 모듈성입니다. 이는 여러 모듈을 포함하여 소프트웨어의 다양한 구성 요소를 쉽게 테스트할 수 있게 해줍니다. 또한 전체 애플리케이션 대신 애플리케이션의 개별 클래스를 테스트하는 데 사용할 수도 있습니다.

JUnit 5의 특징

다음은 JUnit 5의 인기 있는 중요한 기능 몇 가지입니다. 이러한 기능은 다른 단위 테스트 프레임워크와 구별되는 특징입니다.

Feature Description Annotations/Method
테스트 스위트

테스트 스위트는 기본적으로 Smoke, Sanity 등의 테스트 그룹이거나 특정 기능과 관련된 테스트 그룹입니다.

JUnit 5는 함께 실행할 수 있는 테스트 스위트를 생성할 수 있습니다.

테스트 스위트를 사용하려면 JUnit Platform Suite 종속성을 추가하고 다음 주석을 사용해야 합니다.
@SelectPackages,
@SelectClasses, @Suite
어서션 어서션은 소프트웨어의 예상 동작을 확인하는 데 사용됩니다. JUnit 5는 어서션을 쉽게 수행할 수 있도록 내장된 어서션 메소드를 제공합니다. import org.junit.jupiter.api.Assertions; 클래스에 여러 어서션 메소드가 있습니다.
아래에 일부 메소드가 나열되어 있습니다:
assertTrue(), assertFalse(),
assertEquals(), assertAll(), assertNotEquals()
테스트 실행 순서 테스트 실행 순서를 사용자 정의합니다. 개발자가 테스트 실행을 제어하고 필요한 순서대로 테스트를 실행할 수 있도록 합니다. @TestMethodOrder, @Order,
@TestClassOrder
예외 테스트 필요한 예외가 테스트에 던져지는지 확인하는 예외 테스트를 수행합니다. import org.junit.jupiter.api.Assertions;
클래스에서 사용되는 메서드는 다음과 같습니다:
assertThrows()
테스트 의존성 테스트 의존성은 테스트 메서드가 서로 의존하도록 허용하여 순차적인 테스트를 가능하게 합니다. 이는 이전 테스트 메서드에 의존하는 다음 테스트 메서드가 이전 테스트를 통과하지 않는 한 실행되지 않음을 의미합니다. 통합 테스트를 작성하는 동안 유용한 기능입니다. @TestInstance
테스트 비활성화 테스트나 테스트 클래스를 비활성화합니다. @Disabled
타임아웃 지정된 기간을 초과하는 경우 테스트를 실패시킵니다. @Timeout
보고서 테스트 결과를 분석하고 상세 정보를 표시하는 내장 보고서를 제공합니다. 테스트 실행 결과를 포함하는 .html 파일을 생성합니다. N/A

JUnit 4 대 JUnit 5

최신 버전인 JUnit 5의 출시로 인해 프레임워크에 여러 변경 사항과 새로운 기능이 추가되었습니다. 두 버전 간의 차이점은 아래 표에 나열되어 있습니다:

criteria JUNIT4 JUNIT5
아키텍처 모든 것이 단일 JAR 파일에 패키지되었습니다. 3개 하위 프로젝트로 나뉘어 있습니다:
– JUnit 플랫폼
– JUnit Jupiter
– JUnit Vintage
JDK 버전 요구 사항 Java 5 이상 필요 Java 8 이상 필요
서드 파티 통합 플러그인 및 IDE에 대한 서드 파티 통합 지원 없음 서드 파티 통합을 위한 전용 하위 프로젝트(JUnit 플랫폼) 제공
중첩 테스트 지원 중첩 테스트 작성을 위한 어노테이션이 제공되지 않음 중첩 테스트 작성을 위한 @Nested 어노테이션 제공
사용자 정의 확장 등록 지원 사용자 정의 확장을 지원하지 않음 사용자 정의 확장 등록을 위한 @ExtendWith 어노테이션 제공
자주 사용되는 어노테이션 변경 사항 @BeforeClass
@AfterClass
@Before
@After
@Ignore
@BeforeAll
@AfterAll
@BeforeEach
@AfterEach
@Disabled
태깅 및 필터링을 위한 어노테이션 변경 @Category 어노테이션이 사용됨 @Tag 어노테이션이 사용됨
테스트 스위트 @RunWith@Suite 어노테이션이 사용됨 @Suite, @SelectPackages, @SelectClasses 주석은 사용됩니다

JUnit 5 시작하기

이 섹션에서는 IntelliJ IDE를 사용하여 JUnit 5 테스트 케이스를 작성하는 방법을 배웁니다. JUnit 5가 이미 번들로 제공되므로 추가로 설치할 필요가 없습니다.

새 Maven 프로젝트를 생성하고 JUnit 5 의존성을 추가한 후 즉시 테스트 작성을 시작해야 합니다.

Maven 프로젝트에 JUnit 의존성 추가하기

다음 JUnit 5 의존성을 pom.xml 파일에 추가해야 합니다:

  • JUnit Jupiter 엔진
  • JUnit Jupiter API
  • JUnit 플랫폼 스위트(집계자)
  • JUnit Jupiter 매개변수
XML

 

다음은 전체 pom.xml 파일입니다

XML

 

의존성을 추가한 후, 테스트를 작성할 준비가 되었습니다. 하지만 JUnit 5를 사용하여 테스트 작성을 진행하기 전에, 테스트 스위트를 효율적으로 설정하고 원하는 대로 테스트를 실행하는 데 도움이 될 수 있는 기본 주석을 먼저 이해해 봅시다.

JUnit 5에서 사용되는 기본 주석

다음은 개발자가 JUnit 5를 사용하여 테스트를 작성할 때 가장 많이 사용하는 기본 주석입니다.

@BeforeAll 주석

@BeforeAll 어노테이션은 현재 클래스에서 @Test, @RepeatedTest, @ParameterizedTest, 또는 @TestFactory 메서드보다 먼저 실행되어야 하는 메서드를 나타냅니다. 테스트 클래스에서 정적(static) 메서드여야 합니다.

@BeforeAll은 JUnit 4.x에서 사용된 @BeforeClass 어노테이션의 대체물로 사용됩니다.

구문:

Java

 

@BeforeEach 어노테이션

@BeforeEach 어노테이션은 현재 클래스에서 각 @Test, @RepeatedTest, @ParameterizedTest, 또는 @TestFactory 메서드가 호출되기 전에 실행되어야 하는 메서드를 나타냅니다.

이는 테스트 수명주기 메서드의 일부이며 JUnit 4에서 사용된 @Before 어노테이션을 대체합니다.

구문:

Java

 

@AfterAll 어노테이션

@AfterAll 어노테이션은 현재 클래스의 모든 테스트가 실행된 후 호출되어야 하는 메서드를 나타냅니다. 정적 메서드여야 하며 테스트 클래스의 청소(cleanup) 메서드로 사용됩니다.

@AfterAll 어노테이션은 JUnit 4에서 사용된 @AfterClass 어노테이션의 대체물입니다.

구문:

Java

 

@AfterEach 어노테이션

@AfterEach 어노테이션은 현재 클래스에서 각 @Test, @RepeatedTest, @ParameterizedTest, 또는 @TestFactory 메서드가 실행된 후에 실행되어야 하는 메서드를 나타냅니다.

JUnit 4에서 사용되는 @After 어노테이션의 JUnit 5 대체품으로 작동합니다.

구문:

Java

 

@Test 어노테이션

@Test 어노테이션은 어노테이트된 메소드가 테스트 메소드임을 나타냅니다. 테스트 메소드는 private이나 static 메소드일 수 없으며 반환 값이 없어야 합니다.

구문:

Java

 

@DisplayName 어노테이션

@DisplayName 어노테이션은 어노테이트된 테스트 클래스나 메소드에 대한 사용자 정의 이름을 지정하는 데 사용됩니다. 이러한 사용자 정의 이름은 공백, 특수 문자, 심지어 이모지를 포함할 수 있으며 일반적으로 IDE 및 빌드 도구에서 생성된 테스트 보고서에서 활용됩니다.

구문:

Java

 

@Disabled 어노테이션

JUnit 5의 @Disabled 어노테이션은 테스트 메소드나 테스트 클래스를 테스트 스위트에서 제외하는 데 사용됩니다.

테스트 클래스에 적용되면 테스트 클래스 내의 모든 메소드가 자동으로 비활성화됩니다. 이 어노테이션에는 테스트를 비활성화하는 이유를 지정할 수 있는 선택적 매개변수가 있습니다.

구문:

Java

 

JUnit 5를 사용하여 자동화된 테스트 케이스 작성 방법

이제 코드에 진입하여 JUnit 5로 손을 더럽힐 시간입니다. 새로운 Java 클래스, BasicTest를 생성할 것입니다.

Java

 


우리가 논의한 모든 기본 어노테이션이 이번 데모의 일부로 다루어질 것입니다.

BasicTest 클래스에 메소드를 추가하여 JUnit 5에서 사용 가능한 @BeforeAll, @BeforeEach, @AfterAll, @AfterEach, @Test, @DisplayName, @Disabled 어노테이션의 사용법을 보여줍시다.

Java

 

코드 살펴보기

@DisplayName 어노테이션은 테스트 클래스 위에 있으면 테스트가 실행될 때 결과에서 테스트 이름을 “Demo test class”로 표시합니다.

beforeAllTest() 메소드는 모든 테스트 실행 전에 실행되어 “Before All method Called!!”이라는 텍스트를 출력합니다. 그 다음, beforeEachTest() 메소드는 각 테스트 전에 실행되어 “Before Each Method called!!”이라는 텍스트를 출력합니다.

이 클래스에는 testMethodOne(), testMethodTwo(), disabledTest() 세 가지 테스트 메소드가 있습니다. 세 테스트 메소드에는 모두@Test 어노테이션이 붙어 있어 이것들이 테스트 메소드임을 나타냅니다.

disabledTest() 메소드는 @Disabled 어노테이션이 붙어 있기 때문에 실행되지 않습니다.

모든 테스트 실행이 완료되면 afterEachTestMethod() 메소드가 실행되어 @AfterEach 어노테이션이 붙어 있습니다.

마지막으로, 모든 테스트가 실행된 후 afterAllMethod() 메소드가 실행되어 @AfterAll 어노테이션이 붙어 있습니다.

테스트 실행

테스트는 테스트 클래스를 마우스 오른쪽 버튼으로 클릭하고 ‘Test class Name’을 선택하여 실행할 수 있습니다(“BasicTest”인 경우).

또 다른 방법은 아래 스크린샷에 나와 있는 것처럼 테스트 클래스 선언 옆의 녹색 플레이 아이콘을 클릭하는 것입니다: 



IntelliJ IDE에서 다음 스크린샷은 테스트가 성공적으로 실행되었음을 보여줍니다.

위 스크린샷에서 볼 수 있듯이 테스트 클래스의 표시 이름이 인쇄되었고, 비활성화된 테스트도 볼 수 있으며, 비활성화된 테스트의 이유가 콘솔에 인쇄되었습니다.

나머지 모든 테스트 메소드, beforetestaftertest를 포함한 것들은 모두 성공적으로 실행되었으며, 해당 결과가 콘솔에 인쇄되었습니다.

요약

JUnit 5는 개발자들이 코드의 단위 테스트를 수행하기 위해 사용하는 강력한 테스트 프레임워크입니다. 또한 테스트 자동화 엔지니어들이 테스트 자동화 스크립트를 작성하고 실행하는 데 사용됩니다. 개발자와 테스터들이 테스트 스크립트를 작성하고 코드의 단위 테스트를 수행할 수 있도록 다양한 기능을 제공합니다.

자동화된 테스트를 작성하고 실행하는 것 외에도, 자동화된 테스트를 작성하는 동안 유용한 여러 가지 단언 및 확인을 수행하는 여러 가지 방법을 제공합니다. 또한 테스트 실행 결과를 이해관계자에게 보여줄 수 있는 테스트 보고서도 제공합니다.

행복한 테스트 되세요!

Source:
https://dzone.com/articles/beginners-guide-to-junit-5