자바와 JUnit을 활용한 실용주의 단위 테스트 (2)

아연·2023년 10월 12일

Book

목록 보기
3/8
post-thumbnail

<자바와 JUnit을 활용한 실용주의 단위 테스트> 책과 Junit 5, AssertJ 공식문서를 참고하였습니다.


⚠️ 테스트 클래스에서 static 필드는 피해야 한다 !!

📍 @BeforeEach

  • @BeforeEach 메서드는 반환 유형이 void 여야 하며 static 이어서는 안 됩니다. private을 사용하는 것은 권장하지 않으며 향후 릴리스에서는 허용되지 않을 것입니다. 선택적으로 ParameterResolver가 확인할 매개변수를 선언할 수 있습니다.
  • JUnit Jupiter는 단일 테스트 클래스 또는 테스트 인터페이스 내에서 선언된 여러 @BeforeEach 메서드의 실행 순서를 보장하지 않습니다.
  • @BeforeEach 메서드는 @AfterEach 메서드에 연결되지 않습니다. 따라서 wrapping 동작과 관련하여 어떠한 보장도 없습니다. 예를 들어, 두 개의 @BeforeEach 메서드(createA(), createB()) 와 두 개의 @AfterEach 메서드(destroyA(), destroyB()) 가 있다고 가정할 때, destroyA()destroyB() 의 앞이나 뒤에 호출될 수 있습니다. 따라서 개발자는 테스트 클래스 또는 테스트 인터페이스당 @BeforeEach 메서드 하나, @AfterEach 메서드 하나만 선언할 것을 권장합니다.

Example

import org.junit.jupiter.api.*;

public class ExampleTest {

    @BeforeEach
    void createA() {
        System.out.println("createA() executed");
    }

    @BeforeEach
    void createB() {
        System.out.println("createB() executed");
    }

    @AfterEach
    void destroyA() {
        System.out.println("destroyA() executed");
    }

    @AfterEach
    void destroyB() {
        System.out.println("destroyB() executed");
    }

    @Test
    void test1() {
        System.out.println("Test 1 executed");
    }

    @Test
    void test2() {
        System.out.println("Test 2 executed");
    }
}

reusult

createB() executed
createA() executed
Test 1 executed
destroyA() executed
destroyB() executed
createA() executed
createB() executed
Test 2 executed
destroyA() executed
destroyB() executed

📍 @BeforeAll

  • @BeforeAll 이 달린 메서드는 현재 테스트 클래스의 모든 테스트 이전에 실행해야 합니다.
  • @BeforeEach 메서드와 달리 @BeforeAll 메서드는 지정된 테스트 클래스에 대해 한 번만 실행됩니다.

0개의 댓글