Junit5 테스트 코드 작성 가이드입니다.

 

 


 

 

JUnit5는 POJO 기반으로 작성되며, 기본 생성자가 필요합니다.

 

 

 

JUnit5는 JUnit4와 다르게 어노테이션이 매우 다양합니다.

사용되는 어노테이션은 두 가지로 구분합니다.

 

 


 

 

타입 선언부 어노테이션

 

  • @TestInstance :
    각각의 단위 테스트 메서드를 수행할 때, 안전한 결과를 얻어내기 위해 테스트 클래스로부터
    테스트 객체를 어떠한 기준으로 생성할 지 결정하는 어노테이션입니다.
    해당 어노테이션의 속성은 'PER_CLASS'와 'PER_METHOD'가 이며 defualt는 'PER_CLASS'입니다.

    - PER_METHOD(기본값) : 단위 테스트 메서드마다 테스트 객체 생성 후 테스트 메서드를 수행합니다.

    - PER_CLASS : 하나의 테스트 객체만 생성 후, 모든 단위 테스트 메서드를 수행합니다.

    다만 PER_METHOD는 메모리에 부담을 주기 때문에 개발환경을 고려하여 설정해야 합니다.

  • @TestMethodOrder :
    모든 단위 테스트 메서드의 실행순서의 기준과 방법을 설정합니다.
    다양한 속성이 있지만, 주로 OrderAnnotation(@Order, 서수)을 사용합니다.

 

테스트 클래스 블록 어노테이션

 

전처리 어노테이션

 

  • @BeforeAll :
    단위 테스트 메서드 수행 시, 오직 한 번만 수행되는 전처리입니다.

  • @BeforeEach :
    단위 테스트 메서드 수행 시 매번 수행되는 전처리입니다.(JUnit4의 @Before와 동일)

  • @AfterAll :
    단위 테스트 메서드 수행 시, 오직 한 번만 수행되는 후처리입니다.

  • @AfterEach :
    단위 테스트 메서드 수행 시 매번 수행되는 후처리입니다.(JUnit4의 @Before와 동일)

 

 

 

 

후처리 어노테이션

 

  • @Disabled :
    단위테스트 메서드를 제외시킵니다.

  • @Tag :
    단위 테스트의 성격(fast,normal, slow)을 표시합니다.

  • @Test :
    메서드가 단위 테스트용임을 표시합니다.

  • @Order :
    단위 테스트 메서드의 수행 순서를 결정합니다.

  • @DisplayName :
    테스트 도구에 표시되는 단위 테스트의 이름입니다.
    JUnit View에서 해당 어노테이션으로 설정한 이름으로 보여줍니다.

  • @Timeout :
    JUnit4에서는 @Test의 속성이었습니다.
    하지만, JUnit5에서는 다양한 시간 단위로 테스트의 임계 소요 시간을 정의할 수 있도록 분리하여 사용합니다.
    속성으로 value와 unit이 있습니다.

    예를 들어, 0.5초 안에 테스트를 종료해야 한다면 다음과 같이 코드를 작성할 수 있습니다.
    @Timeout(value = 500L, unit = TimeUnit.MILLISECONDS)

 

 


 

 

 

다음은 간단한 JUnit5 테스트 코드 작성법입니다.

@Log4j2
@NoArgsConstructor

// 1. 타입 선언부에 적용해야할 JUnit Jupyter Annotations입니다.
@TestInstance(Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JUnitJupiterTemplateTests {
	
	
    @BeforeAll
    void beforeAll() { // 1회성 전처리
        log.trace("beforeAll() invoked.");
        
        // TODO here.
    } // beforeAll
	
    @BeforeEach
    void beforeEach() { // 매번 수행되는 전처리
        log.trace("beforeEach() invoked.");
        
        // TODO here.
    } // beforeEach
	
    @AfterAll
    void afterAll() { // 1회성 후처리
        log.trace("afterAll() invoked.");
        
        // TODO here.
    } // afterAll
	
    @AfterEach
    void afterEach() { // 매번 수행되는 후처리
        log.trace("afterEach() invoked.");
        
        // TODO here.
    } // afterEach
	
    // ------------------------------------------------
	
    @Disabled
    @Tag("fast")
    @Test
    @Order(1)
    @DisplayName("contextLoads")
    @Timeout(value = 500L, unit = TimeUnit.MILLISECONDS)
    void contextLoads() { // 단위 테스트 메서드
        log.trace("contextLoads() invoked.");
    } // contextLoads
	
} // end class

 

 

 

 

'Spring boot > Maven' 카테고리의 다른 글

Maven Dependency List  (0) 2023.09.01
JUnit4  (0) 2023.08.22
Maven dependency 추가하기  (0) 2023.08.21
pom.xml(메이븐 설정파일)  (0) 2023.07.28

+ Recent posts