본문 바로가기

원리

[Junit5] 테스트 라이프 사이클

 

Junit 의 각 테스트는 실행 할때마다 실행 되는 순서가 정해져 있으며 각각의 테스트가 독립적인 라이프 사이클을 가지고 실행되는 특징이 있다. 순서는 아래와 같다.

 

첫번째,  테스트 메서드를 포함한 객체 생성

두번째,  (존재하면) @BeforeEach 애노테이션이 붙은 메서드 실행

세번째,  @Test 어노테이션이 붙은 메서드 실행

네번째,  (존재하면) @AfterEach 애노테이션이 붙은 메서드 실행

 

 

 

  - 아래 예시에서는 각 테스트 어노테이션이 붙은 기준으로 사이클이 한번씩 돌기 때문 아래 테스트는

 LifeCycleTest 객체가 두번 생성된다.

 

 

 

결과 화면

 

 

 

Junit 에서 제공되는 기본 어노테이션을 확인해 보면

 

@Test 

     - 테스트 메서드를 의미한다.

     - private 으로 붙이면 안된다.

@ BeforeEach @AfterEach

    - 테스트 메서드 전후에 사용된다.

    - BeforeEach 는 테스트를 실행하는데 필요한 준비작업시, AfterEach 는 테스트에 사용한 임시 파일을 삭제 할때

@BeforeAll, @AfterAll 

    - 모든 테스트의 실행 전후에 붙인다. 정적 메서드에 적용된다는 특징이 있다

@DisplayNmae 

    - 자바는 메서드 이름에 공백이나 특수문자를 사용할수 없기 때문에 메서드 이름만으로 테스트 내용을 설명 하기 힘들다. 이때 사용하는 어노테이션이다. 

@Disabled

    - 테스트가 실행되지 않도록 한다. 

 

테스트 코드는 각 @테스트가 독립적으로 실행되는 것이 중요하기 때문에

필드를 공유해서는 안된다. 또한 각 테스트의 실행순서에도 의존하는것은 좋지 않다. 이 경우 위 어노테이션과 라이프 사이클을 고려해서 테스트 할 필요가 있다.  아래는 좋지 않은 예를 보여주는 화면이다.

 

@DisplayName("@DisplayName 테스트") 
public class LifeCycleTest {
 // 두 데이터가 데이터를 공유할 목적으로 필드사용 -> 좋지 않은예 
  private FileOperator op = new FileOperator();
  private static File file;

  @DisplayName("값 같은지 비교")
  @Test
  void fileCreationTest() {
      File createdFile = op.createFile();
      Assertions.assertTrue(createdFile.length() > 0);
      this.file = createdFile;
  }

  @Test
    void readFileTest() {
      long data = op.readData(file);
      AssertTrue(data > 0)
  }
반응형

'원리' 카테고리의 다른 글

ID Token  (2) 2024.03.05
Node.js 가 무엇인지 (작성중)  (0) 2021.11.15
[Vue] Vue.js 기본 원리  (0) 2021.10.14