인프런의 "더 자바, 애플리케이션을 테스트하는 다양한 방법”을 보고 정리한 것임

1. 테스트 인스턴스

JUnit은 테스트 메소드 마다 테스트 인스턴스를 새로 만든다.

  • 테스트 메소드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함이다.

이 전략을 JUnit 5에서 변경할 수 있음

  • @TestInstance(Lifecycle.PER_CLASS)
    • 테스트 클래스당 인스턴스를 하나만 만들어 사용함
    • 경우에 따라, 테스트 간에 공유하는 모든 상태를 @BeforeEach 또는 @AfterEach에서 초기화 할 필요가 있음
    • @BeforeAll과 @AfterAll을 인스턴스 메소드 또는 인터페이스에 정의한 default 메소드로 정의할 수도 있음
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class StudyTest {

    int value = 1;
    @BeforeAll
    void beforeAll() {
        System.out.println("BeforeAll!");
    }

    @AfterAll
    void afterAll() {
        System.out.println("AfterAll!");
    }

    @BeforeEach
    void setUp() {
        System.out.println("BeforeEach!");
    }

    @AfterEach
    void tearDown() {
        System.out.println("AfterEach!");
    }

    @Test
    void instenceCheck1() {
        System.out.println(this);
        System.out.println(value++);
    }

    @Test
    void instenceCheck2() {
        System.out.println(this);
        System.out.println(value++);
    }
}

2. 테스트 순서

실행할 테스트 메소드 특정한 순서에 의해 실행되지만 어떻게 그 순서를 정하는지는 의도적으로 분명히 하지 않는다. (테스트 인스턴스를 테스트 마다 새로 만드는 것과 같은 이유)

경우에 따라, 특정 순서대로 테스트를 실행하고 싶을 때도 있다. 그 경우에는 테스트 메소드를 원하는 순서에 따라 실행하도록 @TestInstance(Lifecycle.PER_CLASS)와 함께 @TestMethodOrder를 사용할 수 있다.

  • MethodOrderer 구현체
    • 기본 구현체
      • MethodName : 메소드명으로 오름차순 정렬 (a~ㄱ), 메소드명이 같다면 파라미터 타입명으로 오름차순 정렬
        - @TestMethodOrder(MethodOrderer.MethodName.class)
      • DisplayName : @DisplayName의 값으로 오름차순 정렬
        - @TestMethodOrder(value = MethodOrderer.DisplayName.class)
      • Random : 랜덤으로 순서를 정하는 방법
        - @TestMethodOrder(MethodOrderer.Random.class)
      • OrderAnnoation : @Order(n) 어노테이션으로 순서를 정하는 방법
        - @TestMethodOrder(value = MethodOrderer.OrderAnnotation.class)
profile
고우고우~

0개의 댓글