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 |