VS시리즈 - BeforeEach vs AfterEach

김현교·2023년 12월 14일
0

VS시리즈

목록 보기
6/12

특징

  • 주로 테스트 프레임워크에서 사용되는 용어
  • 테스트 각각의 시작과 끝에 한번씩 실행
  • JavaScript의 Jasmine, Python의 unittest, Java의 JUnit 등에서 사용

BeforeEach

  • 각각의 테스트 케이스가 실행되기 전에 특정한 설정을 하는 데 사용
  • 테스트를 실행하기 전에 필요한 초기화 작업을 수행하는 데 유용
  • 일관된 환경에서 테스트를 실행 가능

AfterEach

  • 각각의 테스트가 실행된 후에 특정한 정리 작업을 하는 데 사용
  • 테스트가 실행된 후에 리소스를 해제하거나 임시적으로 변경된 상태를
    원래대로 복원하는 데에 주로 활용
  • 테스트 간에 상호 영향이 없도록 보장 가능

예시

BeforeEach

  • 데이터베이스에 새로운 테스트 데이터를 삽입
  • 특정한 객체를 초기화
  • 변수를 설정

AfterEach

  • 데이터베이스에서 테스트에 사용된 데이터를 삭제
  • 특정한 객체의 리소스를 해제

예제1

BeforeEach

	@BeforeEach
    public void beforeEach() {
        System.out.println("BeforeEach");
    }

AfterEach

	@AfterEach
    public void afterEach() {
        System.out.println("AfterEach");
    }

차이점

  • BeforeEach는 초기화에 사용되고, AfterEach는 마무리 작업에 사용

BeforeAll, AfterAll

  • BeforeAll : 테스트들이 실행되기 전 딱 한번 호출
  • AfterAll : 모든 테스트들이 실행된 후 한번 호출

예제2

class StudyTest {
    @Test
    void create1() {
        Study study = new Study();
        assertNotNull(study);
        System.out.println("create1");
    }

    @Test
    void create2() {
        System.out.println("create2");
    }

    @Test
    @Disabled
    void create3() {
        System.out.println("create3");
    }

    @BeforeAll
    static void beforeAll() {
        System.out.println("beforeAll");
    }

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

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

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

결과

beforeAll
beforeEach
create1
afterEach
beforeEach
create2
afterEach
afterAll

결론

  • 이 두 기능은 테스트의 일관성과 격리성을 유지하면서 테스트 환경을 설정하고
    청소하는 데에 큰 도움을 줌
  • Each는 테스트간의 독립성을 위해 매 테스트마다 초기화되어야 하는 클래스 등을 설정하기 위해 사용
  • All은 모든 테스트에 한 번만 로딩되어야 하는 데이터를 로딩할 때,
    테스트에 설정될 불변값이 로딩되어야 하는 경우 사용

profile
내가 공부하면서 궁금했던 걸 올리는 개발 블로그

0개의 댓글